使用 OpenSMTPD 將郵件中繼到多個(gè) smarthost
我喜歡使用本地 SMTP 守護(hù)進(jìn)程從我的筆記本電腦發(fā)送電子郵件,因?yàn)檫@樣我即使在斷開連接的情況下也可以發(fā)送電子郵件,而且,即使是在網(wǎng)絡(luò)正常的情況下,因?yàn)槲也恍枰却W(wǎng)絡(luò)協(xié)議在遠(yuǎn)程 smarthost 上完成。哦,我還需要本地郵件投遞。
多年來,我一直使用 Postfix 來達(dá)到這些目的。它具有可接受的簡(jiǎn)單配置。但最近我開始喜歡 VPN(mullvad,如果你想知道的話),而在 /etc/resolv.conf 發(fā)生變化時(shí)會(huì)變得混亂(例如,你在 Postfix 的服務(wù)啟動(dòng)后才啟動(dòng) VPN)。我找到了一個(gè)非常簡(jiǎn)單的替代方案:OpenSMTPD。
假設(shè)我想在使用 jao@gnu.org 發(fā)送電子郵件時(shí)使用 SMTP 服務(wù)器 fencepost.gnu.org,而在我的 From 頭中使用 mail@jao.io 或 news@xmobar.org 時(shí)使用 smtp.jao.io。OpenSMTPD 讓你通過一個(gè)非常簡(jiǎn)單的配置文件 /etc/smtpd.conf 來實(shí)現(xiàn):
(這是我的 Debian 機(jī)器中的默認(rèn)配置文件。另一個(gè)流行的替代方案是 /etc/openstmpd.conf)。
table aliases file:/etc/aliases
table secrets db:/etc/mail/secrets.db
table sendergnu { jao@gnu.org }
table senderjao { mail@jao.io, news@xmobar.org }
listen on localhost
action "local" mbox alias <aliases>
action "relaygnu" relay host smtp+tls://gnu@fencepost.gnu.org:587 auth <secrets>
action "relayjao" relay host smtps://jao@smtp.jao.io:465 auth <secrets>
match for local action "local"
match for any from mail-from <sendergnu> action "relaygnu"
match for any from mail-from <senderjao> action "relaygan"
我們還為此配置了本地投遞。這是完整的配置文件!唯一需要的另一件事是生成 secrets.db 文件,其中包含與鍵 gnu 和 jao 對(duì)應(yīng)的用戶和密碼(這些只是任意名稱)。為此,我們使用它們創(chuàng)建一個(gè)純文本文件,使用形式為 <key> <user>:<password> 的條目:
gnu jao:my fencepost password
jao mail@jao.io:xxxxxxxxxxxxxxxxx
fencepost.gnu.org 用戶是 jao,smtp.jao.io 的用戶是 mail@jao.io(你看,不需要轉(zhuǎn)義空格或 ats)。然后我們使用程序 makemap 來創(chuàng)建密鑰數(shù)據(jù)庫:
makemap secrets && rm secrets