【问题标题】:Is there an accepted maximum line length for SMTP header fields?SMTP 标头字段是否有可接受的最大行长度?
【发布时间】:2019-07-25 07:16:24
【问题描述】:

问题

如果没有标准,什么是“最大标题行长度”的好值?

对于 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 ForefrontMime4j 彼此一致,最大长度为 1000,只是有人在行尾问题上发生了交叉。

谷歌搜索给了我这个 SO 答案,这意味着没有标准的最大长度: https://stackoverflow.com/a/2721849/924597

是否有“正确”的值?

【问题讨论】:

    标签: smtp mime4j


    【解决方案1】:

    SMTP 定义了一个 maximum line length of 1000 八位字节,包括新的行序列。

    似乎最前沿的软件是有错误的。

    也就是说,软件不能正确处理任意长的行是愚蠢的。您根本不需要定义最大长度。

    在 .NET 空间中,我的 MIME 解析器库没有为解析器定义最大行长度,它只为格式化输出定义了最大行长度,以符合规范。

    【讨论】:

    • 我一直认为 Mime4J 和其他邮件处理库中的各种限制是关于处理恶意/意外边缘情况(即可能导致服务崩溃/DoS 服务的邮件炸弹)。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2021-10-04
    • 1970-01-01
    • 2017-10-12
    • 2011-04-02
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多