问题
如果没有标准,用作“最大标题行长度”的好值是多少?
是否有某种非正式标准来确定 SMTP 标头行的最大长度应该是多少?
语境
我使用Mime4J来解析 SMTP 消息。
最近,我遇到了与很长的标题行相关的解析失败,这是由Microsoft Forefront显然添加的标题引起的。有问题的标题行如下所示:
x-forefront-antispam-report:
CIP:94.245.94.31;IPV:NLI;CTRY:IE;EFV:NLI;SFV:NSPM;SFS:(10019020)(4636009)(136003)(376002)(396003)(346002)(39850400004)(2980300002)(62414003)(199004)(189003)(11346002)(2501003)(6916009)(5640700003)(8936002)(126002)(76176011)(9326002)(486006)(2476003)(476003)(33656002)(3480700005)(2906002)(99286004)(568964002)(21480400003)(446003)(606006)(6506007)(15974865002)(14454004)(61614004)(229853002)(33964004)(53546011)(71200400001)(71190400001)(26005)(102836004)(66066001)(186003)(5660300002)(5070765005)(6246003)(246002)(235185007)(55016002)(316002)(966005)(7696005)(356004)(3846002)(8676002)(9686003)(86362001)(54896002)(6306002)(790700001)(236005)(6116002)(106002)(7066003)(7636002)(7736002)(70586007)(25786009)(70206006)(7116003)(52536014)(14444005)(74316002)(7596002)(16586007)(336012)(53386004)(5024004)(45080400002)(478600001)(71440200001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB8PR03MB5548;H:eu22-emailsignatures-cloud.codetwo.com;FPR:;SPF:Pass;LANG:en;PTR:eu22-emailsignatures-cloud.codetwo.com;A:1;MX:1;
这导致 Mime4j 出现以下解析错误:
org.apache.james.mime4j.MimeIOException: org.apache.james.mime4j.io.MaxLineLimitException: Maximum line length limit (1000) exceeded
通过将 Mime4J 配置为接受更长的行,我能够解决这个问题:
msgFactory.setAttribute(
"MimeEntityConfig",
new MimeConfig.Builder().setMaxLineLen(2000).build() );
我将它翻倍到 2000,因为我在堆空间方面有足够的空间,所以这不是问题。
但是我实际上可以通过将最大行长度增加到 1001 来解决这个问题。这个标题行正好是 999 个字符长,默认Mime4J
值为 1000,这似乎不仅仅是巧合。
这整个问题可能是由于收到的邮件以 Windows 行结尾(即两个字节而不是一个字节)终止这一事实而导致的一个错误。
似乎MS Forefront
并Mime4j
同意彼此的最大长度为 1000,只是有人在行尾的问题上交叉了线。
谷歌搜索给了我这个 SO 答案,这意味着没有标准的最大长度: https ://stackoverflow.com/a/2721849/924597
有“正确”的价值吗?