我正在尝试发送一封包含indy 9的电子邮件:
代码:
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作为客户端)。
我已经尝试过其他内容类型而没有成功:
注意:我不会升级到Indy 10。
答案 0 :(得分:5)
当TIdMessage.ContentType
存在时,您将TIdAttachment
设置为错误的值。它需要设置为'multipart/mixed'
,因为您将'multipart/alternative'
和'application/x-zip-compressed'
部分混合在同一顶级MIME嵌套级别,而'text/...'
部分是子级改为'multipart/alternative'
部分。
看一下我在Indy网站上写的以下博客文章:
您尝试创建的电子邮件结构由“纯文本和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...