Delphi 为什么在某些情况下,使用idSMTP发送的电子邮件不';你不能正常地去新线吗?

Delphi 为什么在某些情况下,使用idSMTP发送的电子邮件不';你不能正常地去新线吗?,delphi,indy,indy10,Delphi,Indy,Indy10,我正在使用TIdMessage和tidmtp发送纯文本电子邮件 对于主体我使用一个简单的连接字符串,如 Body := SomeText + #13#10 + SomeOtherText + #13#10 + SomeMoreText + #13#10 + FinalText; 无论如何,在生成的电子邮件中,一些“#13#10”不会被忽略。我记录了Body变量,我可以看到文本转到新行,无论如何在电子邮件中这不会发生。奇怪的是,这并不是

我正在使用
TIdMessage
tidmtp
发送纯文本电子邮件

对于
主体
我使用一个简单的连接字符串,如

Body := SomeText + #13#10 +
          SomeOtherText + #13#10 +
          SomeMoreText + #13#10 +
          FinalText;
无论如何,在生成的电子邮件中,一些“
#13#10
”不会被忽略。我记录了
Body
变量,我可以看到文本转到新行,无论如何在电子邮件中这不会发生。奇怪的是,这并不是发生在每一行上,而是只发生在某些行上

你知道为什么会这样吗?你能推荐一些检查的东西吗?在某些情况下,
#13#10
与文本电子邮件正文之间是否存在可能的冲突

更新

经过更多的调查(感谢您的评论),我意识到这是一个Outlook可视化问题,无论如何,我仍然不清楚这个问题

这是用NotePad++(我打开了从outlook保存的msg文件)打开的电子邮件的正文,其中我还显示了换行符(您可以将#13#10视为CR LF。我用红色和绿色突出显示了outlook中存在问题的两个换行符(但您可以看到,在NP++中,它们与所有其他换行符一样):

Outlook中的电子邮件如下所示(请注意,Outlook表示该邮件有额外的换行符,并且这些换行符已被删除,但他提供了一个恢复这些换行符的选项:

选择该选项后,电子邮件正常:


我不明白为什么只有在某些换行符上才会发生这种情况。这有助于您更好地理解问题吗?

您可以尝试使用
IdMessage.NoEncode:=True
,这样正文就不会被编码

或者最好使用现代编码
IdMessage.ContentType:=“text/html”
并将
#13#10
替换为

编辑: 这是一个Outlook Express问题

看一看。 一种解决方法是在每行文本的开头添加两个空字符,以使Outlook不会删除分隔符


请注意,Microsoft支持部门还建议使用HTML格式作为Outlook Express的可能解决方法:

方法2.使用HTML或富文本格式 您可以在创建新项目时使用HTML或富文本格式,也可以将现有帖子更改为这些格式


如果您的ContentType为纯文本,则可能是电子邮件客户端删除了一些换行符。

您使用的是最新的Indy版本(10.5.8)?您可以使用
IdMessage.ContentType:=“text/html”
并用

@mjn替换
\13\10
。我肯定有10.5.8,但在构建机器上,我仍然有一个与Delphi 2009一起提供的。我现在将升级一次,再试一次。请显示实际生成的电子邮件并指出您认为的错误我确认10.5.8中也存在问题。我更新了我的邮件,请查看最新部分,看看是否有帮助。此答案建议了一些解决方法,但没有回答问题,问题是为什么最初的线路发送错误。我很清楚Rob。可能是Indy,可能是邮件客户端。我建议n备选案文:)如果可能的话,我喜欢使用
#13#10
,因为我也想在
TMemo
上显示消息,所以我对
NoEncode
选项感兴趣。你能告诉我在这种情况下哪些是优点/缺点,哪些是编码吗?在TMemo中显示它没有问题。只需分配
Memo.Text
到一个变量
S
并将
#13#10
更改为

并发送它。谢谢kobib,是的,我将首先使用2个空字符的技巧,因为我即将发布,更改越少越好,然后我将在下一个版本中使用您的

建议+可变想法。您的意思是邮件客户正在阅读我的电子邮件正确地说,“误译”换行符?是的,我确认,请参阅我对该问题的最新更新。但原因是什么?有关Outlook和换行符的信息,请参阅。Outlook中似乎有一个默认设置的选项。我没有按照Microsoft的建议尝试使用富文本格式。我最终切换到html格式的邮件,但这带来了它自己的一系列挑战在处理Outlook客户端和垃圾邮件过滤器时。非常感谢,95%的客户使用Outlook,因此我无法说出他们的想法,以更改邮件客户端,因此我需要解决此问题。谢谢,我选择此作为答案,因为它是问题的答案(因此可以帮助其他堆栈溢出用户),但我将使用kobib的想法来解决问题。不过,该支持票证并不能解释Outlook决定删除换行符的原因。特别是对于纯文本消息。