如果大家已經在使用第三方郵件服務方案發送並收取郵件,則無需運行自己的郵件服務器。然而,如果大家管理一套雲服務器,且其中安裝的應用需要發送郵件通知,那么運行一套本地只發送SMTP服務器則更為理想。
如何安裝並配置Postfix以作為只發送SMTP服務器。
先決條件
要完成教程,大家需要:
- 一套Ubuntu 16.04 Droplet,具體參閱Ubuntu 16.04初始設置指南,其中包括創建一個擁有sudo權限的非root用戶。
- 一個指向服務器的有效域名,例如example.com,具體請參閱主機名稱指南
請注意,我們的服務器主機名稱應當與域名或者子域名相匹配。大家可以在命令提示中輸入hostname驗證服務器的主機名稱。輸出結果應當與Droplet創建時我們為其提供的名稱相匹配。
第一步——安裝Postfix
在此步驟中,我們將了解如何安裝Postfix。在這里,我們選擇最為高效的安裝方式,即安裝mailutils軟件包。
首先更新該軟件包數據庫:
sudo apt-get update
安裝mailtuils將安裝Postfix以及其它一些Postfix所必需的程序。
sudo apt install mailutils
在安裝過程末尾,大家會看到如下圖所示的屏幕,其中默認選項為Internet Site。本教程亦推薦該默認選項,因此按下TAB再按回車。
在此之后,大家會看到另一個容器,如下所示。System郵件名稱應該與我們在創建服務器時為其分配的名稱保持一致。如果其顯示subdomain.example.com這樣的子域名,則將其變更為example.com。完成后,按下TAB再按回車。
第二步——配置Postfix
在這里,我們需要配置Postfix,要求其僅處理運行所在服務器上的郵件,即localhost。
Postfix需要在配置中監聽loopbackinterface,即該服務器用於內部通信的虛擬網絡接口。要實現變更,打開主Postfix配置文件:
sudo nano /etc/postfix/main.cf
打開之后,找到以下部分:
/etc/postfix/main.cf . . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
將inet_interfaces = all行變更為inet_interfaces = loopback-only。
inet_interfaces = loopback-only
另外我們還需要修改mydestination指令,其用於指定通過local_transport郵件交付傳輸進行交付的域名列表。在默認情況下,其值如下所示:
mydestination = $myhostname, example.com, localhost.com, , localhost
此場景下的推薦默認值如下所示,請大家根據實際情況進行修改:
mydestination = $myhostname, localhost.$mydomain, $mydomain
保存並退出。
如果大家在單一服務器上托管多個域名,則其它域名同樣可以利用mydestination指令被發送至Postfix。
最后,重啟Postfix。
sudo systemctl restart postfix
第三步——測試SMTP服務器
在這里,我們將測試Postfix是否能夠利用mail命令向外部郵件賬戶發送郵件。
發送測試郵件:
echo “This is the body of the email” | mail -s “This is the subject line” your_email_address
在執行測試時,大家可能需要使用對其中的對應部分進行調整,從而滿足自己的實際情況。
現在檢查發送測試消息的目標郵箱地址。大家應該能夠在收件箱中看到對應消息——如果沒有,請檢查垃圾郵件箱。
注意,在此配置中,From字段內的地址應為sammy@example.com,其中sammy為Linux用戶名,而域名部分則為該服務器的主機名稱。如果大家變更用戶名,則其中的From地址也應當對應變更。
第四步——轉發系統郵件
最后設置轉發機制,這樣我們就能夠將指向系統root的郵件轉發至自己的個人外部郵箱了。
要實現這一功能,我們需要編輯/etc/aliases文件。
- sudo nano /etc/aliases
此文件的默認內容如下:
/etc/aliases
# See man 5 aliases for format
postmaster: root
在此設定下,系統生成的郵件會被發送至root用戶。這里我們需要將其重新路由至自己的郵箱,變更后為:
/etc/aliases
# See man 5 aliases for format
postmaster: root
root: your_email_address
運行以下命令使變更生效:
- sudo newaliases
再次發送郵件以進行測試:
- echo “This is the body of the email” | mail -s “This is the subject line” root
大家應該能夠正常收取到郵件。
總結
這就是Postfix只發送郵件服務器的全部設置流程。大家可能還需要采取一些額外步驟來保護自己的域名免受垃圾郵件打擾。
如果大家在單一地址接收來自服務器的通知,那么大家可能需要將其納入白名單以避免其被列為垃圾郵件。不過,如果大家希望向潛在站點用戶發送郵件,則應當設置SPF記錄及以確保服務器郵件合法性。
一台服務器檢查程序需要將檢查結果自動發送給指定郵箱,想當然的使用mail命令,結果在測試時發現有錯誤:
mail: cannot send message: process exited with a non-zero status
其沒有提到明確的問題,但從其中提出的/var/log/有兩個log都記錄了對應的信息,即syslog和mail.err。mail.err中的信息更明確:
postfix/sendmail[27115]: fatal: open /etc/postfix/main.cf: No such file or directory
然后意識到這台服務器安裝完成后並沒有配置postfix服務,於是重新配置:
sudo dpkg-reconfigure postfix
然后再使用mail命令發送郵件就正常了