我正在使用后缀作为"myDomain.com"的邮件服务器。此外,我还安装了转发到gmail的服务。到目前为止,这工作正常。但是,当有人向我发送一封包含可执行文件的电子邮件时,gmail会退回邮件。来自Gmail的通知邮件将转发给原始发件人,但不会转发给我。我想要完成什么:
- "
- A"将可执行文件发送到我在"myDomain.com"的地址。
- 电子邮件将被转发到 Gmail。 -> Gmail 会退回邮件并显示通知。
- 我想在邮箱"myDomain.com"收到这封退回的电子邮件。
- 原始发件人"A"不会从 Gmail 获得任何内容。
关于如何实现这一目标的任何想法?谢谢!
- 电子邮件将被转发到 Gmail。 -> Gmail 会退回邮件并显示通知。
- 我想在邮箱"myDomain.com"收到这封退回的电子邮件。
- 原始发件人"A"不会从 Gmail 获得任何内容。
Gmail 不会向原始发件人发送退回邮件。
通信流如下所示:
步骤1:原始发件人邮件服务器与您的服务器通信(我们称之为 mx.example.com)
HELO originalsendermx
250 mx.example.com
MAIL FROM: originalsender@spammy.example
250 2.1.0 Ok
RCPT TO: a@example.com
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: this is a virus in an executable for a@example.com
<base64encodedvirusexe>
.
250 2.0.0 Ok: queued as C9F786427FA
QUIT
221 2.0.0 Bye
第 2 步:您的 postfix 服务器有一个规则,可以将所有邮件转发到 a@example.com to b@example.org,因此它连接到 mx.example.org:
HELO mx.example.com
250 mx.example.org
MAIL FROM originalsender@spammy.example
250 2.1.0 Ok
RCPT TO: b@example.org
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: this is a virus in an executable for a@example.com
<base64encodedvirusexe>
.
550 5.2.3 The content of this message is not allowed
QUIT
221 2.0.0 Bye
因此,您的服务器接受了来自原始发件人的邮件,但 example.org(或您的 Gmail)不接受来自您服务器的邮件。根据 RFC 2821,您的服务器应生成未送达通知并将其发送给原始发件人:
如果 SMTP 服务器已接受中继邮件的任务,则更高版本发现目的地不正确或邮件无法由于其他原因交付,那么它必须构造一个"无法投递的邮件"通知消息并将其发送到无法投递的邮件的发件人。
这是后缀的默认行为。OTOH,常识表明你不应该在这种情况下发送反弹,RFC5321同意。
实现此目的的最快方法是修改master.cf
以永不发送退回邮件:
bounce unix - - n - 0 discard
但这有点极端,在许多环境中可能无法实现。您可以使用header_checks
来缩小范围。
重要的一点是,Gmail没有弹跳任何东西,它只是拒绝它。您的服务器是弹跳它的服务器。
我或多或少遇到了同样的问题;我注意到Gmail在这种情况下使用SMTP响应代码421。由于它不是 5xx 代码,这意味着邮件将排队等待以后重试,并位于deferred
队列中。因此,我构建了一个 cronjob 来每小时将这些邮件从队列中清除一次,运行以下命令:
mailq | egrep -i -B 1 'google.com.*421-4.7.0.*gsmtp' | egrep -v '^(|--' | cut -d' ' -f1 | postsuper -v -d -
确切的错误消息格式可能会有所不同,但421-4.7.0
似乎是共同点。