2018年4月29日 星期日

在Linux上啟用php的mail()

在Linux上安裝了PHP後,一般來說是沒辦法是用php來寄電郵的,mail()會return nothing。若要啟用的話,需要先指定php如何寄電郵。

最簡單的方法是在其他網站註冊一個電郵賬號(例如gmail),然後用ssmtp以該電郵賬號的身份寄電郵。一般來說在自己的伺服器上架一個電郵伺服器(mail server)是個不實際的做法 ,一來相當費功夫,二來寄出去的電郵很可能會被當成spam而被擋掉,無論你怎麼設定都無法解決這個問題。這篇文章很詳細地解釋不應自己架電郵伺服器的原因:https://www.digitalocean.com/community/tutorials/why-you-may-not-want-to-run-your-own-mail-server

1. 取得電郵賬號的SMTP資料

需要知道的資料:
SMTP server的domain和port (一般來說SSL/TLS會用465)
賬號和密碼

2. 安裝ssmtp

sudo apt-get update
sudo apt-get install ssmtp

修改/etc/ssmtp/ssmtp.conf,設定以下的參數:

root=user@example.com
mailhub=smtp.example.com:465 FromLineOverride=YES AuthUser=user@example.com AuthPass=password UseTLS=YES

然後可以試試寄電郵:
echo "Hello world!" | ssmtp recipient@example.com

有些電郵伺服器指定要有From之類的header,那就先打以下的command line:
ssmtp recipient@example.com
按Enter後打電郵內容,打完按Ctrl+D,注意SUBJECT之後要空一行,再打電郵內容:
TO: recipient@example.com
FROM: <from@example.com>
SUBJECT: Testing subject

Hello world!

3. 修改php.ini

PHP5的位置: /etc/php5/apache2/php.ini
PHP7的位置: /etc/php/7.0/apache2/php.ini

修改該sendmail_path(原本這句應該是被comment掉的)

sendmail_path = /usr/sbin/ssmtp -t

重啟Apache後應該就可以用PHP的mail()了。如果電郵伺服器要求有From之類的header的話,在使用mail()時記得也要給header。

沒有留言:

張貼留言