我在我的服务器上使用 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 中进行有条件传输?例如,我想创建一个测试邮件地址,例如[email protected]
. 哪个帐户别名为devnull
。我的目标是收件人[email protected]
默默地丢弃传入的邮件并自动回复 PONG 消息给发件人以进行测试。如果收件人地址不是[email protected]
然后传输到 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 经验和几个小时的筛子脚本经验。我是新手。我希望我的问题和目标足够明确。如果您需要更多信息,请问我。
为什么不使用后缀自定义回复?我不确定消息 ID 是否会更改,但请尝试一下。
在 main.cf 上,配置 smtpd_recipient_restrictions
然后在 /path/custom_replies
并对那个文件做一个postmap
问候
我通过在主题字符串之前添加“Re:”缩写来修复它。如果主题更改,似乎 GMail 会创建新的对话历史记录。
Message-id
不是问题。另外我没有使用 Sievevacation
插件来回复。而是sieve_extprograms
将其插入并通过管道传输到 shell 脚本,然后curl
发布到我的 NodeJS 服务器。