[Linux] Postfix SMTP送信郵件伺服器 – 安裝設定指南

安裝

apt-get install postfix

基本設定

設定檔位置:/etc/postfix/main.cf

myhostname - 本機FQDN,建議設定成寄件人Domain name
alias_maps - 別名`hash:/etc/aliases`
alias_database - 別名資料庫,預設為`hash:/etc/aliases`
mynetworks - 允許IP網段(ex:192.168.0.0/24 10.0.0.0/8)
inet_interfaces - all 聆聽所有界面,或localhost

Return-Path 更換

寄件者若不設定 Return-Path 的情況下,送出郵件的 Return-Path 預設即會使用系統用戶名加上Hostname:linux-user@myhostname

此情況下若寄件人為 service@myhostname 而因由linux-user執行發信而 Return-Path 為 linux-user@myhostname,恐會造成收信伺服器驗證問題。

PHP 解決方法

$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'Return-Path: webmaster@example.com' . "\r\n" .

設定Header也可能最後送出時被Postfix Override而失效,已下強制方法測試有效:

mail('nobody@example.com', 'the subject', 'the message', $headers,
   '-f webmaster@example.com');

Reference: PHP Mail() additional_parameters
Return-Path問題詳細測試文:Setting Return-Path in PHP mail()


送信阻擋不順疑難排除

IPv6 ReverseDNS:

如果機器IPv6開啟但沒有作ReverseDNS,像GMail就可能因此阻擋退信。

以Ubuntu(16.04)為例:

sudo vim /etc/sysctl.conf

// 底部加入以下設定值
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

重啟套用設定

sudo sysctl -p

檢查是否生效,沒出現文字就是已經關了 ipv6 了。

ip a | grep inet6

AWS EC2 送信過慢問題:

AWS EC2有對SMTP服務(似乎是封包)進行節流阻擋,目前可以透過特殊表單申請開通即可!

Leave a Reply

Your email address will not be published. Required fields are marked *