【问题标题】:Why in some conditions an email sent with idSMTP doesn't go properly to new line?为什么在某些情况下,使用 idSMTP 发送的电子邮件无法正确进入新行?
【发布时间】:2012-01-17 14:06:12
【问题描述】:

我正在使用 TIdMessageTIdSMTP 发送纯文本电子邮件。

对于Body,我使用了一个简单的串联字符串,例如

Body := SomeText + #13#10 +
          SomeOtherText + #13#10 +
          SomeMoreText + #13#10 +
          FinalText;

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

您知道为什么会发生这种情况吗?你能建议一些检查吗?在某些情况下,#13#10 和文本电子邮件正文之间是否存在一些可能的冲突?

更新

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

这是在 NotePad++ 中打开的电子邮件正文(我打开了从 Outlook 保存的 msg 文件),其中还显示了换行符(您可以看到 #13#10 为 CR LF。我用红色和绿色突出显示了 2 行在前景中有问题的中断(但您可以看到在 NP++ 中它们看起来像所有其他换行符):

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

选择该选项后,电子邮件就可以了:

我不明白为什么这只发生在某些换行符上。这是否有助于您更好地理解问题?

【问题讨论】:

  • 您使用的是最新的 Indy 版本(10.5.8)吗?
  • 您可以使用IdMessage.ContentType := 'text/html' 并将#13#10 替换为<br>
  • @mjn 好点。我肯定有 10.5.8,但在构建机器上我仍然有 Delphi 2009 附带的那个。我现在将升级再试一次。
  • 请出示实际生成的邮件并指出您认为的错误之处。
  • 我确认 10.5.8 也存在问题。我更新了我的消息,请查看最新部分,看看是否可以提供帮助。

标签: delphi indy indy10


【解决方案1】:

您可以尝试使用IdMessage.NoEncode := True,这样Body 就不会被RCF 821 编码。

或者更好地使用现代编码IdMessage.ContentType := 'text/html'并将#13#10替换为<br>

编辑: 这是一个 Outlook Express 问题。

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


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

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

【讨论】:

  • 此答案提出了一些解决方法,但没有回答问题,即首先询问为什么线路发送不正确。
  • 我很清楚 Rob。可能是 Indy,也可能是邮件客户端。我提出了一个替代方案:)
  • 如果可能的话,我喜欢使用#13#10,因为我也想在TMemo 上显示消息,所以我对NoEncode 选项很感兴趣。你能告诉我哪些是优点/缺点,在这种情况下哪些是编码?
  • 在 TMemo 中显示没问题。只需将Memo.Text 分配给变量S 并将#13#10 更改为<br> 并发送。
  • 谢谢kobib,是的,我将首先使用2个空字符技巧,因为我即将发布并且更改越少越好,然后我会在接下来的<br>建议+可变想法中使用释放。
【解决方案2】:

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

【讨论】:

  • 您的意思是邮件客户端未正确阅读我的电子邮件,“错误解释”换行符?
  • 是的,我确认,请参阅我对该问题的最新更新。但为什么呢?
  • 有关 Outlook 和换行符的信息,请参阅 http://support.microsoft.com/kb/287816。看起来 Outlook 中有一个默认设置的选项。我没有像微软建议的那样尝试使用富文本格式。我最终切换到了 html 格式的邮件消息,但这在处理 Outlook 客户端和垃圾过滤器时带来了一系列挑战。
  • 非常感谢,我 95% 的客户使用 Outlook,所以我不能说他们,要更改邮件客户端,所以我需要解决问题。谢谢,我选择这个作为答案,因为它是问题的答案(因此它可以帮助其他 Stack 溢出用户),但我将使用 kobib 的想法来解决问题。
  • 支持票证没有解释为什么不过,Outlook 决定删除换行符。特别是对于纯文本消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2018-02-26
  • 2018-02-01
  • 2013-05-22
  • 2014-02-20
相关资源
最近更新 更多