【问题标题】:TIdMessage mandatory subject fieldTIdMessage 必填主题字段
【发布时间】:2013-09-26 19:10:31
【问题描述】:

我正在使用TIdMessage,当我分配空主题时,例如IdMsg->Subject = ""; 传出消息没有 "Subject:" 标头。

如果我通过空格来添加主题,例如IdMsg->Subject = " "; 然后消息有 Subject: 标题,即使它修剪了空间 - 输出不是:"Subject:[sp][sp][cr][lf]" 但它是"Subject:[cr][lf]"。这显然与冒号后和实际数据前都有空格的其余标题不一致,因此空主题应为"Subject:[sp][sp][cr][lf]"

我知道TIdMessage 试图通过删除标题或修剪它们来优化消息,但它在这里太聪明了。

有没有办法强制 Subject 标头后面有 2 个空格(无需编辑 TIdMessage 源代码)?

对于那些想知道原因的人 - 我想确保愚蠢的电子邮件阅读程序/脚本正确解释为“空主题”,这是所有这一切的原因,而不是其他原因,删除 Subject: 标题并不多无论如何优化。

【问题讨论】:

    标签: delphi c++builder indy


    【解决方案1】:

    TIdMessageClient 生成要发送的标头数据时,您的空格字符实际上在编码过程中幸存下来,但是当它解析最终标头数据并折叠长标头以适应电子邮件时,空间被TIdHeaderList 修剪行长度限制。折叠过程为给定标题生成的每一行都会被右修剪,并且由于您的标题数据仅包含空格,因此会被丢弃。

    禁用该折叠的唯一方法是将 TIdMessage.LastGeneratedHeaders.FoldLines 属性设置为 False,除非您知道您的标头总是足够短以至于永远不需要折叠,否则这是不可取的。

    另一种选择是将TIdMessage.Subject 设置为空白字符串,然后改用TIdMessage.ExtraHeaders 属性。您必须使用 ExtraHeaders.Add() 而不是 ExtraHeaders.Values 以便按原样添加字符串并避免折叠:

    Msg.ExtraHeaders.Add('Subject:  ');
    

    【讨论】:

    • 那么有什么可取的方法吗?添加自定义标题?我希望您现在不要将此作为错误修复,因为我确实需要将主题包含为空...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多