出于某种原因,我们无法向我们的一位客户发送更大的电子邮件。小型电子邮件很好,但即使是带有 1MB 附件的消息也无法交付几个小时 - Postfix 日志不断填充status=deferred (conversation with customer***[IP***] timed out while sending message body)
,但最终消息被发送。
客户正在使用“Microsoft ESMTP MAIL 服务,版本: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
哦,男孩,我喜欢这些服务器。几乎普遍地,他们对消息正文进行基于内容的扫描,然后如果他们不喜欢内容,则向 DATA 命令发送非 200 响应。原则上这很好,但是当您让一些资源不足的 crapbox 运行 Exchange 和一些超重的专有磁盘空间浪费进行扫描时,机器像糖蜜一样运行,其他人都超时。
是的,从理论上讲,这可能是您所建议的 MTU 问题,但实际上这不太可能 - 如果您可以通过 2000 字节的消息,则反驳该理论(并且没有多少消息少于 2000字节,包括标题,在那里)。您端的 tcpdump 可以确认这一点——如果这是 TCP 级别的问题,那么您将看到您端尝试重新传输完整大小的数据包;如果是远程 MTA-being-slow 问题,则不会有任何重传,并且停顿点将是您的端发送关闭“
.
”时。鉴于远端似乎毫无头绪(“其他人都没有问题”我的突出背后),我只是将 Postfix 的超时时间增加到一些明显更高的数字并保持不变。您要查看的三个设置是
smtp_data_done_timeout
、smtp_data_xfer_timeout
和smtp_data_init_timeout
(大致按重要性顺序)。正如您所看到的,默认值非常慷慨,因此需要提高它们确实表明远端是多么的笨重。