Postfix + Dovecot、Sieve 执行流程及自动回复

Postfix + Dovecot、Sieve 执行流程及自动回复

我在我的服务器上使用 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 脚本?如果可以,我甚至不需要使用devnullblackhole 别名。我可以在我的 sieve 脚本中执行此操作,如下所示:

if address :matches "To" "ping@*" {
    vacation
        :seconds 1
        "PONG";
    discard;
}

更新:

我创建了一个名为ping,并在 GMail 帐户中收到了一封回复邮件。但这并不是真正的回复邮件。这是我收件箱中的一封新邮件。然后我尝试使用 Apple 邮件 GUI 软件手动回复。它按预期工作。然后我转到 gmail 并按下菜单show original

来自 Apple Mailmessage-id域部分来看,发件人的正确虚拟域。 来自 Apple 邮件

但从 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 服务器。

相关内容