大部分的網站應該都需要系統可以進行發信的動作,因為這樣可以發送網站的確認信件或者是密碼遺失的重設信件,不過如果是使用虛擬主機,那主機商基本上都會設定好,使用者不須額外設定。但是若是使用免費空間,那大多數的免費空間會禁止使用,因為怕有使用者濫發廣告信件。
如果是自己架設的網站,想要啟用SMTP該怎麼辦呢?通常我們不需要架設SMTP伺服器,我們可以利用現有的資源,修改一下系統參數就可以了。所謂的限有資源,以架設在家裡來說,就是使用ISP的SMTP,如果是架設在學校,就使用學校的SMTP伺服器就可以,不用額外操心這部分囉!
通常想要使用現有的SMTP伺服器,那使用者一定要改一下php.ini的系統設定,否則是無法使用的,因為預設值都是「localhost」,但是我們本機並沒有架設Mail伺服器,所以這部分是無效用的。那如前面提到,要使用現有的SMTP設定,通常就找你的ISP,如果是在學校,就找學校的SMTP設定就可以了。
以Hinet的光纖網路來說,它的SMTP就是「msa.hinet.net」,如果是寬頻網路可能要再查一下了,當然你也可以用上面這組試試看!如果知道寬頻設定的朋友,可以留言告知我們一下,謝謝。如果你是其它家網路,像SeedNet、So-Net之類的,那就請洽他們的客服人員詢問看看囉!不過,如果你電腦內有設定Outlook這類軟體,其實可以開啟Outlook看一下,因未設定上是一樣的。
修改主機的SMTP
如果想要透過ISP或是學校的SMTP來發現,首先一定要先找到學校或是ISP的SMTP設定了,在此就提供兩個我在使用的SMTP設定,當然並不是人人都可以用的,如果你剛好跟我狀況相同就可以使用了XD。
- Hinet:msa.hinet.net (目前在光世代測試可以)
- 世新大學:smtp.shu.edu.tw (限在世新大學校園內的電腦)
如果要設定的話,請開啟伺服器的php.ini後,搜尋一下關鍵字「SMTP」,之後就會看到一區是「mail function」,那邊就是系統設定了,將SMTP後方的「localhost」改成「你要使用的SMTP」設定,在「smtp_port」改成對應的埠號,一般來說預設都是25,所以可以不用額外更動。
另外,下方有個寄件者「sendmail_from」,你可以設定一下發信人的名義是誰,將後面的信箱改一下就可以了,但最重要的,記得把整串語法前面的分號「;」去掉,因為這邊的分號表示「註解」,若無去掉,那設定也是沒用的。
- 函式:mail
- 功能:可透過SMTP進行發信
- 參考:http://php.net/manual/en/function.mail.php
當設定好SMTP伺服器後,接下來就是重啟阿帕契(Apache),重啟後就可以了,你可以丟一支探針看看是不是系統可以進行發信了,當然還有個正簡單的方法,就是直接透過程式來測試,如果你的信箱可以收到信,這表示你的SMTP設定對了,如果不能收到信,那很可能是主機哪邊沒設定好,或者是說SMTP不能使用,也有可能是被防火牆、防毒軟體擋下來也說不定。
[gist id=4e1f478981b8a1d62912 file=php-mail.php]
將以上程式碼複製並貼到NotePad++,然後取名為「send.php」,然後丟到你要測試的伺服器上面,然後用瀏覽器開啟「http://你的網站網址/send.php」並執行,透過以上這支簡單的程式就可以測試看看您的設定到底有沒有設定正確,如果設定正確網頁就會顯示「信件已經發送成功。」如果無法寄信,就會顯示「信件發送失敗!」。
如果設定上都可以,就可以開始進行程式的開發了,像是可以弄個會員確認信、電子報等等,你都可以透過mail函式來達成,你可參考PHP5網管實驗室的中文說明,也可以參考一下PHP官方網站的英文說明,好好的利用這個函式來發送信件吧!
我想問BLUEHOST要如何設定SMTP?
我有一個程式是用戶註冊後可發信到用戶信箱進行驗證
只是確定資料可以進資料庫
但就是無法發信?
連錯誤訊息都沒有一片空白
虛擬主機本身應該就有囉
請問一下,不是自架的,國外購買的虛擬主機可以使用嗎?
如果是虛擬主機,基本上免設定直接使用PHP可發信
真的嗎?如果是就太好了。
只是虛擬主機商已經有webmail服務,不知道給不給用PHP MAIL
那個無關哦! webmail是如同gmail一樣的收信。
你要詢問的是主機商是否支援SMTP發信功能,才對唷!
我還是遇到一個問題
我找到這個程式
http://www.helloweba.com/view-blog-228.html
可以註冊然後驗證信箱這樣
只是我照它的弄一遍了還是無法寄信?
http://www.blueshop.com.tw/board/FUM20041006152627A9N/BRD20150614170609AMS.html
有沒有什麼情況下,本來可以正常透過php發信
突然有一天就持續不能發信了
會顯示錯誤碼:mailer error could not instantiate mail function
原本port號是587可以正常發信
主機可能關掉mail發信功能
我想請問一下為什麼發送成功
卻收不到信
有沒有什麼方法可以避免對方主機擋信?
這個可能要做DNS反解之類的,寄不出去可能是ISP本身自己擋信也不一定。 如果要避免擋信,可以找專門發郵件的服務套用API使用。
請問他已顯示信件已經發送成功
但我去郵件收還是收不到
這是什麼狀況?
1. 對方主機擋信
2. 接收或發送端的防火牆擋信
請問如何設定發送的權限, username? password?
多加一支使用者等級的php就解決囉!
這因該是用localhost指令去發送吧?!
如果本機不支援… 因該會發送失敗?!
我記得Pchome跟Gmail也有提供(不太確定)