Indy 9 - 使用身体作为RTF和附件发送电子邮件

时间:2013-03-13 19:55:23

标签: delphi indy

我正在尝试发送一封包含indy 9的电子邮件:

  • Body作为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作为客户端)。

我已经尝试过其他内容类型而没有成功:

  • text / rtf
  • 文本/富集

注意:我不会升级到Indy 10。

1 个答案:

答案 0 :(得分:5)

TIdMessage.ContentType存在时,您将TIdAttachment设置为错误的值。它需要设置为'multipart/mixed',因为您将'multipart/alternative''application/x-zip-compressed'部分混合在同一顶级MIME嵌套级别,而'text/...'部分是子级改为'multipart/alternative'部分。

看一下我在Indy网站上写的以下博客文章:

HTML Messages

您尝试创建的电子邮件结构由“纯文本和HTML和附件:仅限不相关的附件”部分涵盖。您只需用RTF替换HTML,并忽略TIdText部分的'multipart/alternative'对象,因为Indy 9中的TIdMessage将在内部为您创建(在Indy 10中明确需要它,因为它比Indy 9更深入的MIME支持。

试试这个:

Message := TIdMessage.Create()
Message.Recipients.EMailAddresses := 'someone@domain.dotcom';

Message.ContentType := 'multipart/mixed';

with TIdText.Create(Message.MessageParts) do
begin
  ContentType := 'text/plain';
  Body.Text := 'You need an RTF reader to view this message';
end;

with TIdText.Create(Message.MessageParts) do
begin
  ContentType := 'text/richtext';
  Body.LoadFromFile('c:\bodymsg.rtf');
end;

TIdAttachment.Create(Message.MessageParts, 'c:\myattachment.zip');

// send...