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决定删除换行符的原因。特别是对于纯文本消息。