【问题标题】:postfix forwarding mails getting bounced back to original sender后缀转发邮件被退回给原始发件人
【发布时间】:2015-01-26 10:46:58
【问题描述】:

我使用 postfix 作为“myDomain.com”的邮件服务器。此外,我还为 gmail 安装了转发服务。到目前为止效果很好。但是当有人给我发一封电子邮件时,例如一个可执行文件,gmail 会退回邮件。来自 gmail 的此通知邮件将转发给原始发件人,但不会转发给我。 我想要完成的事情:

  • “A”将可执行文件发送到我在“myDomain.com”的地址。
  • 电子邮件将被转发到 gmail。 -> gmail 通过通知退回邮件。
  • 我想在我的邮箱“myDomain.com”中收到这封退回的电子邮件。
  • 原始发件人“A”没有从 gmail 获得任何信息。

关于如何实现这一点的任何想法? 谢谢!

【问题讨论】:

  • 这个问题应该移到 serverfault.com,在那里它可能会得到一个很好的答案。

标签: postfix-mta forward email-bounces


【解决方案1】:
  • 电子邮件将被转发到 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 的邮件转发到 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,常识dictates 在这种情况下您不应该发送退回邮件,RFC5321 同意。

完成此操作的最快方法是修改 master.cf 以从不发送退回邮件:

bounce    unix  -       -       n       -       0       discard

但这有点极端,在许多环境中可能无法撤消。您可以使用header_checks 缩小范围。

重要的是 gmail 不会退回任何东西,它只是拒绝它。你的服务器是弹跳它的那个。

【讨论】:

  • 您能否详细说明如何在此处使用header_checks? (我假设作为bounce 的一个选项(而不是discard)?这可以匹配Action: failedStatus: 5.7.1Remote-MTA: dns; mx4.mail.icloud.com 等来自(将)生成的退回消息吗?另一方面,我仍然会宁愿一开始就拒绝它们,但是对于这个 Postfix 需要在排队之前立即尝试交付它们(保持打开接收连接),类似于“队列前内容过滤器”,但这似乎不是有可能吧?(它只是一个小型邮件系统)
  • 因为原来的问题毕竟真的是关于不同的东西,所以我创建了一个新问题:serverfault.com/questions/934760/…
【解决方案2】:

我或多或少遇到过同样的问题;我注意到在这种情况下,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 似乎是共同点。

【讨论】:

  • 我发现这个答案非常有用。问题在于 Gmail:如果他们不想接受邮件,他们应该发出 5xx 代码!但是到底是如何写信给 Gmail 并告诉他们“您的邮件服务器配置错误”:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多