fetchmail/postfix - 如果邮件太大则退回邮件

fetchmail/postfix - 如果邮件太大则退回邮件

我有一个 Ubuntu 邮件服务器,它通过 fetchmail 从 ISP 检索邮件并通过 amavis 和 postfix 发送。

Postfix 的大小限制为 20MB 左右。大于此大小的邮件会从服务器中删除,但到目前为止已被默默删除,因为 /etc/fetchmailrc 没有 postmaster 的定义,并且包含“set no bouncemail”。

我想通知发件人有关邮件被拒收的信息。但是“set no bouncemail”(“避免 4xx 错误导致的损失”)的注释让我认为将其更改为“set bouncemail”可能是危险的或不明智的。应该如何理解这个注释?

有什么方法可以自定义退回邮件吗?它似乎源自“邮件”,并且包含一些本地信息,这些信息对于邮件过大的发件人来说似乎毫无用处。

进一步思考后,我发现下载如此大的邮件、处理然后将其退回似乎很愚蠢。fetchmail 有一个选项可以限制要下载的邮件大小,但我不知道在这种情况下如何发送退回邮件(并且邮件仍留在服务器上)。有什么办法吗?

答案1

我觉得使用 没什么问题set bouncemail。根据手册页:

set bouncemail     Direct error mail to the sender (default)

set no bouncemail  Direct error mail to the local postmaster
                   (as per the ’postmaster’ global option above). 

据我理解,评论"Avoid loss on 4xx errors."可能意味着以下内容:

以数字开头的错误4是临时错误。错误4xx不是致命错误,意思是“我此刻遇到了一个小问题,无法处理您的消息,请您稍后再试”。此错误的示例为451 Temporary lookup failure。在这种情况下,发送方服务器(如果按照 RFC 正确配置)将稍后再次尝试传递消息。如果在下次尝试时接收服务器上的问题得到解决 - 消息将被传递。如果问题仍然存在 - 则将再次给出451 Temporary lookup failure。这种情况将持续到消息过期(这是邮件服务器的单独设置)。

现在,如何将其应用于我们的情况。假设某人的服务器配置不正确,因此在收到4xx错误时它不会稍后尝试 - 它只会删除该消息。并且他向您发送电子邮件,而您遇到了临时查找问题。因此您的 postfix 返回451错误。发件人的服务器收到451错误并停止任何进一步的传递尝试(这是错误的)。此时,您丢失了电子邮件,因为您遇到了临时问题并且因为另一台服务器的配置错误。

因此,fetchmail 试图通过在出现错误时不退回电子邮件来避免此问题4xx。由于它已经下载并且已经在您的计算机上,因此保留该消息而不将其发回确实有一定意义。

只需启用set bouncemail,无需担心任何事情,因为大多数邮件服务器都有正确的(根据 RFC )配置,它们会尝试再次发送邮件。由于邮件服务器配置错误,您有 1-5% 的机会在一段时间内丢失一封电子邮件。

关于这一点:

进一步思考后,我发现下载如此大的邮件、处理然后将其退回似乎很愚蠢。fetchmail 有一个选项可以限制要下载的邮件大小,但我不知道在这种情况下如何发送退回邮件(并且邮件仍留在服务器上)。有什么办法吗?

如果您希望 postfix 处理该消息,则 Fetchmail 必须下载该消息。如果 fetchmail 不下载该消息 - postfix 将永远看不到它。我怀疑 fetchmail 会将此事通知发件人。如果您想将此事通知发件人 - 您必须让 fetchmail 下载该消息并将其提供给 postfix。

另一个可能的选择 - fetchmail 从某个地方 (IMAP/POP3) 下载消息。如果您可以控制此 POP3 帐户 - 在那里设置限制,它也会正常工作。

相关内容