TIdMessage必需主题字段

时间:2013-09-26 19:10:32

标签: delphi c++builder indy

我正在使用TIdMessage,当我分配空主题时,例如IdMsg->Subject = "";外发邮件没有"Subject:"标题。

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

我理解TIdMessage尝试通过删除标题或修剪它们来优化消息,但这只是太聪明了。

有没有办法强制使用Subject标题后面有2个空格(不编辑TIdMessage源代码)?

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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