
輕量級的msmtp配合SMTP在Linux伺服器搭建郵件傳送服務
輕量級的msmtp配合SMTP在Linux伺服器搭建郵件傳送服務
郵件傳送通常有三種方式:自建郵件伺服器、使用郵件提供服務商API方式和SMTP方式。 自建郵件伺服器需要佔用比較多的記憶體且需要額外進行比較多的設置,不適合少量郵件的使用者使用; API方式一般適合從程式開發開始就在程式中寫好,一般小使用者都使用開源程式; SMTP比較靈活可以使用郵件服務商或者個人郵箱的SMTP服務,對於每天傳送量不多使用SMTP相對來說也比較方便。 大部分程式如Wordpress、Discuz X等常見的程式一般後台都有SMTP的設置,設置好之後就可以通過SMTP傳送郵件,但對於沒有SMTP相關設置的程式來說就無法正常發出郵件,今天我們主要就針對這種情況下使用msmtp調用SMTP伺服器傳送郵件。
1、msmtp簡介
msmtp是一款專門負責郵件傳送的SMTP用戶端軟體,支援TLS/SSL/STARTTLS、多種認證方式、多使用者等。 類似的程序其實很多如古老的mailx、s-nail、ssmtp等,msmtp比較活躍比較好用一些。
2、SMTP服務商的選擇
首推:Mailgun,每天有免費的額度。 其次:SendGrid、SendinBlue等等都有免費發信額度。 再其次:Microsoft365或其他服務平臺提供的SMTP服務。 最後:個人郵箱的SMTP服務。
在使用上建議使用TLS加密或STARTTLS加密,不建議使用未加密的25埠進行傳送郵件,首先未加密可能會存在洩露其次很多VPS或雲服務商都已經採取了默認封鎖25埠的設置。
3、msmtp安裝
Debian/Ubuntu/
apt-get install -y msmtp
4、msmtp配置
設定檔位置:/etc/msmtprc
該檔不一定自動創建,下面以SSL/TLS加密為例:
defaults
tls on
#如果不是SSL/TLS加密方式改成off
tls_starttls off
#如果是STARTTLS加密改成on
tls_certcheck off
logfile /var/log/ msmtp.log
account demouser
#account后面为自定义的名字,隨便都可以,只要與最後面的account default:後面的一樣就可以
host smtpdm.domain.com
#host后为SMTP服务器地址
port 465
#端口TLS加密的一般为465,根據實際情況而定,不建議使用未加密的25埠,很多服務商會遮罩該埠
auth plain user [email protected] from [email protected]
password 密碼 account default : passed
上面 [email protected] 為使用者名一般為郵箱位址,密碼一般為郵箱的登錄密碼,QQ、Gmail等一些SMTP為單獨的授權碼或密碼之類的。
保存完配置檔進行測試郵件能否正常傳送。
執行:
echo“來自msmtp傳送測試郵件” | msmtp 自己的郵箱
郵箱地址用於測試看是否能正常收到郵件。
5、PHP郵件傳送配置
php配置檔位置:/usr/local/php/etc/php.ini
編輯該檔,查找 sendmail_path
更改為:sendmail_path = /usr/bin/msmtp -t
如果前面有 ; 將該分號去掉,保存。
重啟php-fpm或Apache生效。
6、可能會遇到的問題
6.1、Ubuntu/Debian下可能會無法記錄日誌,解決方法:
1
2
apt install -y apparmor-utils
aa-disable /etc/apparmor.d/usr.bin.msmtp