今天遇到一个奇怪问题,用户反馈邮件发送失败。远程查查吧,大小、收件人等等啥的都未超限制。怪了 . ??
于是与用户了解发送时间,去邮件系统服务器sendmail日志查,发现关键信息
“stat=Headers too large (32768 max)”。哈哈,原来是邮件头超了,再查查用户foxmail那封邮件,查查邮件源码,发现源码中 References:字段的内容太多,从14年到18年的信息都有。原来是用户习惯在邮件的基础上点击全部回复,于是一封14年写的邮件,就重复重复再重复,一直回复到啦18年,惊!

解决方案:
可以编辑 /etc/mail/submit.cf,修改sendmail支持最大头部 :
Maximum length of the sum of all headers
#O MaxHeadersLength=32768
O MaxHeadersLength=256000

或者,让用户重新写一封。。。。。

下面是邮件头部格式记录
--------------------------------------------❤------------------------------------------
Subject: 邮件主题
Return-Path: 提供了邮件操作的电子轨迹,应提供给发送人一个回复路径.
Received: 提供了邮件操作的电子轨迹,每一台接收到邮件的机器都会自动添加以“Received:”开始的那一行。如果你收的邮件有多个以它开头的行,表明这封邮件可能是被转发或被退回的错误邮件。缩进的那一行是本行的继续。
From: 它记录了这封邮件来自哪个或哪些人的地址,但并不一定是邮件的发送人,
Sender: 如果存在的话应该总是包含实际邮件发送人的有效邮件地址.
X-organization: 以X-开始的字段是用于增加更多信息的”用户自定义”字段.
X-Phone: 同上
Reply-to: 指出了这封信和回复地址.
Errors-to: 告诉Sendmail 应该将出错信息送到哪里
To: 收件人
Cc: 副本抄送
Bcc: 匿名发送, Bcc行包含某些人地址,这些人接收这封邮件,但是收件人列表的其他人并不知道这一点.
Message-ID: 邮件唯一标识符.
Subject: 主旨
Comment: 注释,很少用.
Date: 日期
Resent-From: 重发或转发邮件添加"resent"信头
Resent-To:
Resent-Cc:
Resent-Bcc
Resent-Date:
Resent-Message-Id:
Return-Receipt-To: 如果它是一个消息的信头中的一行,当这封邮件被投递给最终目的地时,一个返回收据被发送到这个信头行规定的地址,
Apparently-To: 当惟一的收信人信息在信封上时,它被添加到邮件中
Precedence: 它如果存在,会用后面给定的值来标明该项邮件的优先权值.
References: 通过In-Reply-To域和References域中关联找到所有与需检 邮件内容相关的邮件,进行内容比较验证。 (个人理解,此字段就是记录邮件回复记录的信息关联)
In-Reply-To:
Keyword:
Full-Name: 用于填定发件人的全名