[PHP]使用Mail函式透過SMTP發信

大部分的網站應該都需要系統可以進行發信的動作,因為這樣可以發送網站的確認信件或者是密碼遺失的重設信件,不過如果是使用虛擬主機,那主機商基本上都會設定好,使用者不須額外設定。但是若是使用免費空間,那大多數的免費空間會禁止使用,因為怕有使用者濫發廣告信件。

如果是自己架設的網站,想要啟用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」,你可以設定一下發信人的名義是誰,將後面的信箱改一下就可以了,但最重要的,記得把整串語法前面的分號「;」去掉,因為這邊的分號表示「註解」,若無去掉,那設定也是沒用的。

[PHP]使用Mail函式透過SMTP發信

當設定好SMTP伺服器後,接下來就是重啟阿帕契(Apache),重啟後就可以了,你可以丟一支探針看看是不是系統可以進行發信了,當然還有個正簡單的方法,就是直接透過程式來測試,如果你的信箱可以收到信,這表示你的SMTP設定對了,如果不能收到信,那很可能是主機哪邊沒設定好,或者是說SMTP不能使用,也有可能是被防火牆、防毒軟體擋下來也說不定。

將以上程式碼複製並貼到NotePad++,然後取名為「send.php」,然後丟到你要測試的伺服器上面,然後用瀏覽器開啟「http://你的網站網址/send.php」並執行,透過以上這支簡單的程式就可以測試看看您的設定到底有沒有設定正確,如果設定正確網頁就會顯示「信件已經發送成功。」如果無法寄信,就會顯示「信件發送失敗!」。

如果設定上都可以,就可以開始進行程式的開發了,像是可以弄個會員確認信、電子報等等,你都可以透過mail函式來達成,你可參考PHP5網管實驗室的中文說明,也可以參考一下PHP官方網站的英文說明,好好的利用這個函式來發送信件吧!