Postfix

Postfix + Dovecot,Sieve 執行流程和自動回复

  • June 18, 2021

我在我的伺服器上使用 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域部分是正確的發件人虛擬域。 來自 Apple 郵件

但是來自 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

問候

引用自:https://serverfault.com/questions/1066069