0

我正在使用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: 标头并不是什么优化反正。

4

1 回答 1

2

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

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

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

Msg.ExtraHeaders.Add('Subject:  ');
于 2013-09-26T20:10:41.160 回答