【问题标题】:Content-Transfer-Encoding: none - how to decode content?Content-Transfer-Encoding: none - 如何解码内容?
【发布时间】:2014-02-10 22:31:01
【问题描述】:

我使用 Lotus Notes NotesMIMEEntity 来解析和转换电子邮件。 NotesMIMEEntity 有一个属性“Encoding”,它应该给我当前消息的编码。 通常这很好用,但对于某些消息,我得到(有效)结果“无”或 1725。

是否有可以用来解码此类消息的默认编码,例如quoted-printable?如何确定消息的格式。

我尝试了相关的 RFC,但无法获得任何明确的信息。 Another question here 正在做启发式方法,这真的有必要吗?

非常感谢您的帮助。

【问题讨论】:

    标签: lotus-notes mime lotusscript


    【解决方案1】:

    如果返回的是 ENC_NONE (1725),则表明发送软件省略了 Content-Transfer-Encoding 标头,或者以某种方式将其搞砸了,使其无法读取。

    鉴于此,您要么必须假设它根本没有编码,要么您必须假设发送方可能确实已经对其进行了编码,但忘记设置标头。在后一种情况下,您可能想尝试猜测它是什么 - 即启发式方法。对于您正在处理的消息,这种情况真的很可能吗?我不能为你回答这个问题。我也无法回答您是否真的有必要知道编码。这取决于您的要求是什么以及您要如何处理数据。 (例如,如果要求您的 Lotus Notes 用户必须准确地看到不使用 Lotus Notes 的其他人看到消息的方式,那么问题是其他人看到的内容将取决于他们使用的软件所做的假设!你不可能真的知道!)

    坦率地说,除非有人专门向我展示了一条经过编码但具有错误 Content-transfer-encoding 标头的消息,并且还设法提出了软件应该尝试的合理理由,否则我只会采用前一种解释修复在发送端损坏的消息。

    BTW:请记住,7bit、8bit 和二进制 all 表示数据未编码。它们之间的区别只是对接收系统的“提示”,即如果数据通过不同的方法重新传输,则可能需要对其进行编码。然而,在所有这些情况下,对数据做的正确做法是在不应用任何转换的情况下复制它(当然,除非您收到 8 位数据但您在 7 位环境中运行)。

    【讨论】:

    • 感谢理查德的回答。是的,我必须获取消息的解码内容才能将其传输到另一个非 Notes 系统。是的,我已经收到了未指定任何编码的消息,但引用的内容可打印。看来我必须采用启发式方法。
    • 正如@Yosi 的回答所暗示的那样,规范说明7bit 是默认的uf 没有指定编码。
    【解决方案2】:

    对于普通 SMTP,7 位将是默认的 Content-Transfer-Encoding。 具体来说,要将quoted-printable 编码为 8bit,您可以使用这个 PHP 函数:

    string quoted_printable_decode ( string $str )
    

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 2011-11-09
      • 2017-10-03
      • 2015-10-20
      • 2013-10-20
      • 2012-07-19
      • 2014-03-30
      • 2011-07-07
      相关资源
      最近更新 更多