Postfix + Dovecot,Sieve 執行流程和自動回复
我在我的伺服器上使用 Postfix 和 Dovecot LMTP。我的問題是如何創建一個靜默丟棄收件人地址並回復自動回复?我還想學習 Postfix 和 Dovecot 執行控制流程。這是我的後綴的一部分
main.cf
:alias_maps = hash:/etc/aliases # Virtual domains virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 115 virtual_mailbox_base = /home/vmail virtual_mailbox_maps = mysql:/etc/postfix/mysql/mailbox.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql/domains.cf virtual_alias_maps = mysql:/etc/postfix/mysql/aliases.cf virtual_transport = lmtp:unix:private/dovecot-lmtp
在我的
/etc/aliases
:devnull: /dev/null
在我的拙見中,Postfix 處理收件人地址是否存在?如果存在收件人地址,則傳輸到 Dovecot LMTP 以處理本地傳遞。是否可以在 Postfix 中進行有條件傳輸?例如,我想創建一個測試郵件地址,例如
ping@example.com
. 哪個帳戶別名為devnull
。我的目標是收件人ping@example.com
默默地丟棄傳入的郵件並自動回复 PONG 消息給發件人以進行測試。如果收件人地址不是ping@example.com
然後傳輸到 Dovecot-lmtp。我嘗試使用帶有假期擴展的 Dovecot Sieve 過濾器外掛來處理自動回复。但是在我係統的mail.log中:# replaced actual domain name with DOMAIN postfix/lmtp[13532]: 62EBD333697: to=<devnull@DOMAIN>, orig_to=<ping@DOMAIN>, relay=DOMAIN[private/dovecot-lmtp], delay=538, delays=538/0.02/0.01/0.44, dsn=5.1.1, status=bounced (host DOMAIN[private/dovecot-lmtp] said: 550 5.1.1 <devnull@DOMAIN> User doesn't exist: devnull@DOMAIN (in reply to RCPT TO command))
所以,我猜 Dovecot Sieve 過濾器外掛不適用於不存在的帳戶。是否可以在檢查使用者郵箱之前執行 Sieve 腳本?如果是這樣,我什至不需要使用
devnull
黑洞別名。我可以在我的篩子腳本中這樣做:if address :matches "To" "ping@*" { vacation :seconds 1 "PONG"; discard; }
更新:
我在我的數據庫中創建了一個名為的使用者
ping
,並在我的 GMail 帳戶中收到了一封回复郵件。但這並不是真正的回复郵件。這是我收件箱裡的新郵件。然後我嘗試使用 Apple 郵件 GUI 軟體手動回复。它按預期工作。然後我去 gmail 並按菜單show original
。Apple Mail 的
message-id
域部分是正確的發件人虛擬域。但是來自 Dovecot/Sieve 的
message-id
域部分是我伺服器的hostname
.我不知道為什麼會這樣。但我的猜測是可能是因為域名被更改了?在 Apple Mail 軟體的工作範例中,它是正確的發件人虛擬域。但是從篩子自動回復中,它改變了我伺服器的真實主機名。
另一個 Postfix 日誌來自
/var/log/mail.log
postfix/cleanup[1329]: EE83F333699: message-id=<dovecot-sieve-1623257247-953496-0@HOSTNAME>
PS:我只有幾天的 Postfix、Dovecot 經驗和幾個小時的篩子腳本經驗。我是新手。我希望我的問題和目標足夠明確。如果您需要更多資訊,請問我。
我通過在主題字元串之前添加“Re:”縮寫來修復它。如果主題更改,似乎 GMail 會創建新的對話歷史記錄。
Message-id
不是問題。另外我沒有使用 Sievevacation
外掛來回复。而是sieve_extprograms
將其插入並通過管道傳輸到 shell 腳本,然後curl
發佈到我的 NodeJS 伺服器。
為什麼不使用後綴自定義回复?我不確定消息 ID 是否會更改,但請嘗試一下。
在 main.cf 上,配置 smtpd_recipient_restrictions
check_recipient_access hash:/path/custom_replies
然後在 /path/custom_replies
ping@example.com REJECT Custom message
並對那個文件做一個postmap
問候