我在我的服务器上使用 Postfix 和 Dovecot LMTP。我的问题是如何创建一个静默丢弃收件人地址并响应自动回复?我还想学习 Postfix 和 Dovecot 执行控制流。这是我的 Postfix 的一部分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
blackhole 别名。我可以在我的 sieve 脚本中执行此操作,如下所示:
if address :matches "To" "ping@*" {
vacation
:seconds 1
"PONG";
discard;
}
更新:
我创建了一个名为ping
,并在 GMail 帐户中收到了一封回复邮件。但这并不是真正的回复邮件。这是我收件箱中的一封新邮件。然后我尝试使用 Apple 邮件 GUI 软件手动回复。它按预期工作。然后我转到 gmail 并按下菜单show original
。
来自 Apple Mailmessage-id
域部分来看,发件人的正确虚拟域。
但从 Dovecot/Sieve 的message-id
域名部分来看,我的服务器hostname
。
我不知道为什么会发生这种情况。但我猜可能是因为域名被更改了?在 Apple Mail 软件的工作示例中,它是正确的发件人虚拟域。但从 sieve 自动回复来看,它被更改为我服务器的真实主机名。
另一个 Postfix 日志来自/var/log/mail.log
postfix/cleanup[1329]: EE83F333699: message-id=<dovecot-sieve-1623257247-953496-0@HOSTNAME>
附言:我只有几天使用 Postfix、Dovecot 的经验,以及几个小时使用 sieve 脚本的经验。我是个新手。我希望我的问题和目标足够清楚。如果您需要更多信息,请随时问我。
答案1
为什么不使用 postfix 自定义回复?我不确定消息 ID 是否会改变,但可以尝试一下。
在 main.cf 上,smtpd_recipient_restrictions 配置
check_recipient_access hash:/path/custom_replies
然后在/path/custom_replies
[email protected] REJECT Custom message
并对该文件进行后映射
问候
答案2
我通过在主题字符串前添加“Re:”缩写来修复它。似乎如果主题更改,GMail 会创建新的对话历史记录。
Message-id
不是问题。另外,我没有使用 Sievevacation
插件来回复。而是sieve_extprograms
使用插件并将其传送到 shell 脚本,然后curl
发布到我的 NodeJS 服务器。