Delphi TIdMessage必填主题字段

Delphi TIdMessage必填主题字段,delphi,c++builder,indy,Delphi,C++builder,Indy,我正在使用TIdMessage并且当我分配空主题时,例如IdMsg->subject=“”传出消息没有主题:标题 如果我使用空格添加主题,例如IdMsg->subject=“”则消息有Subject:header,即使它修剪了空间-输出不是:“Subject:[sp][sp][cr][lf]”,而是“Subject:[cr][lf]”。这显然与其他标题不一致,这些标题在冒号之后和实际数据之前都有空格,因此空主题应该是“subject:[sp][sp][cr][lf]” 我知道TIdMessage

我正在使用
TIdMessage
并且当我分配空主题时,例如
IdMsg->subject=“”传出消息没有主题:
标题

如果我使用空格添加主题,例如
IdMsg->subject=“”
则消息有Subject:header,即使它修剪了空间-输出不是:
“Subject:[sp][sp][cr][lf]”
,而是
“Subject:[cr][lf]”
。这显然与其他标题不一致,这些标题在冒号之后和实际数据之前都有空格,因此空主题应该是
“subject:[sp][sp][cr][lf]”

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

有没有办法强制在
主题
标题后面有两个空格(不编辑TIdMessage源代码)


对于那些想知道原因的人-我想确保愚蠢的电子邮件阅读程序/脚本正确地解释为“空主题”这就是所有这些的原因,而不是作为其他的东西和删除主题:头部无论如何都不是一个很好的优化。

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

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

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

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

那么有没有一个明智的方法呢?添加自定义标题?我希望你现在不要把它作为一个bug来修复,因为我确实需要将主题作为空的包含进来。。。