Postfix“向“Microsoft ESMTP MAIL Service”发送邮件正文时超时”

Postfix“向“Microsoft ESMTP MAIL Service”发送邮件正文时超时”

由于某种原因,我们无法向一位客户发送较大的电子邮件。小型电子邮件没问题,但即使是带有 1MB 附件的邮件也几个小时都无法发送 - Postfix 日志不断填满status=deferred (conversation with customer***[IP***] timed out while sending message body),但最终邮件还是被发送了。

客户正在使用“Microsoft ESMTP MAIL Service,版本:6.0.3790.3959”(使用 telnet 检查端口 25),尽管我不确定这是否真的是收件人软件的错误。我们可以毫无问题地向几乎所有其他地方发送电子邮件。客户已确认他们没有遇到其他人向他们发送邮件的此类问题。只有来自我们服务器的邮件似乎被卡住了。

我尝试将传出接口的 MTU 值降低到 1000 甚至 500。其他地方或者表明存在一个罕见的问题,但没有解决方案或确认。

以下是向该客户发送典型消息的 Postfix 日志。(电子邮件地址替换为***,客户邮件服务器替换为customer***ip***

Aug 18 15:41:28 gozilla postfix/cleanup[14751]: F0DB414080: message-id=<***>

Aug 18 15:41:28 gozilla postfix/qmgr[21922]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 15:44:44 gozilla postfix/qmgr[14985]: F0DB414080: skipped, still being delivered
Aug 18 15:44:45 gozilla postfix/qmgr[15132]: F0DB414080: skipped, still being delivered
Aug 18 15:44:45 gozilla postfix/qmgr[15242]: F0DB414080: skipped, still being delivered
Aug 18 15:44:47 gozilla postfix/smtp[14752]: F0DB414080: to=<***>, relay=customer***[IP***], delay=199, delays=0.64/0/0.68/198, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

Aug 18 15:46:44 gozilla postfix/qmgr[15242]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 15:50:01 gozilla postfix/smtp[15555]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=514, delays=317/0.01/0.17/196, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

Aug 18 15:52:52 gozilla postfix/qmgr[15242]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 15:56:35 gozilla postfix/smtp[15872]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=908, delays=685/0.01/0.16/222, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

Aug 18 16:14:45 gozilla postfix/qmgr[15242]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 16:18:18 gozilla postfix/smtp[17065]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=2210, delays=1997/0/0.17/213, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

Aug 18 16:23:22 gozilla postfix/qmgr[17635]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 16:27:23 gozilla postfix/smtp[17646]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=2755, delays=2515/0.01/0.21/240, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

 --- cut out more lines like this ---

Aug 18 19:56:17 gozilla postfix/qmgr[18145]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 19:59:31 gozilla postfix/smtp[26730]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=15484, delays=15289/0.01/0.2/194, dsn=4.4.2, status=deferred (conversation with customer***[IP***] timed out while sending message body)

Aug 18 22:21:17 gozilla postfix/qmgr[18145]: F0DB414080: from=<***>, size=1671905, nrcpt=1 (queue active)
Aug 18 22:26:01 gozilla postfix/smtp[32493]: F0DB414080: to=<***>, relay=customer***[IP***]:25, delay=24274, delays=23989/0.01/0.37/284, dsn=2.6.0, status=sent (250 2.6.0  <***> Queued mail for delivery)
Aug 18 22:26:01 gozilla postfix/qmgr[18145]: F0DB414080: removed

答案1

哦,天哪,我爱这些服务器。它们几乎普遍地对邮件正文进行基于内容的扫描,如果它们不喜欢内容,则向 DATA 命令发送非 200 响应。原则上这没问题,但是当您让一些资源不足的垃圾箱运行 Exchange 并且一些超重的专有磁盘空间浪费进行扫描时,机器运行起来就像糖浆一样,其他所有人都会超时。

是的,理论上这可能是您所说 MTU 问题,但实际上这种情况不太可能发生 —— 如果您可以让 2000 字节的消息通过,则证明该理论是错误的(而且包括标头在内,小于 2000 字节的消息并不多)。您这边的 tcpdump 可以证实这一点 —— 如果是 TCP 级别问题,那么您会看到您的这边尝试重新传输全尺寸数据包;如果是远程 MTA 速度慢的问题,则不会有任何重新传输,并且停顿点将在您的这边发送结束“ .”时。

鉴于远端似乎毫无头绪(“每个人别的没问题” (我后面有突出的描述),我只需将 Postfix 的超时时间增加到某个更高的数字,然后让事情顺其自然。您要查看的三个设置是smtp_data_done_timeoutsmtp_data_xfer_timeoutsmtp_data_init_timeout(大致按重要性顺序排列)。如您所见,默认值非常慷慨,因此需要将它们调高确实表明远端有多么笨拙。

相关内容