【发布时间】:2013-03-13 19:55:23
【问题描述】:
我正在尝试使用 indy 9 发送电子邮件:
- 正文为 RTF,从 TRichEdit 格式化
- 附加一个文件
代码:
Message := TIdMessage.Create()
Message.Recipients.EMailAddresses := 'someone@domain.dotcom';
Message.ContentType := 'multipart/alternative';
with TIdText.Create(Message.MessageParts) do
ContentType := 'text/plain';
with TIdText.Create(Message.MessageParts) do
begin
ContentType := 'text/richtext';
Body.LoadFromFile('c:\bodymsg.rtf');
end;
TIdAttachment.Create(Message.MessageParts, 'c:\myattachment.zip');
// send...
结果:正文为空(使用 web gmail 和 Outlook 2010 作为客户端)。
我已经尝试过其他内容类型但没有成功:
- 文本/rtf
- 文本/丰富
注意:我不会升级到 Indy 10。
【问题讨论】:
-
indy10 出局的合理原因是什么? Indy9 真的很老了,有一些 smtp 相关的 bug。
-
Remy Lebeau 对链接副本(包括他的 cmets)的回答似乎回答了这个问题。 (不过,您必须阅读 cmets,这可能是他的答案在那里不被接受的原因。)关键是使用
TRichEdit.SaveToStream和Body.LoadFromStream而不是Body.LoadFromFile,因为LoadFromFile假定为纯文本。 -
@KenWhite:还请记住,链接的副本是针对 Indy 10 的。由于 Indy 9 缺乏深度 MIME 支持,Indy 9 的这种情况需要一些不同的方法。至于您对
LoadFromStream()与LoadFromFile()的评论,LoadFromFile()在内部调用LoadFromStream(),而TIdText.Body只是TStrings,因此它将按原样加载文件的RTF 编码。 -
@Remy:在骗局中没有抓住 Indy 10。无论如何,我知道你会回答这个问题。 ;-)
-
@whosrdaddy:是的,代码适应,高影响!