我们有一个用Delphi7编写的Windows服务,它可以发送包含HTML的电子邮件。在我添加附件之前,它运行得很好。添加附件后,HTML不再显示为HTML,而是显示为纯文本。
经过一番研究,我发现我必须将邮件内容类型设置为multipart/mixed
,但这似乎没有改变任何东西。我还发现几篇文章显示,我必须使用MessageParts
添加多个内容类型,如下所示:
对于附件,我有下面的代码,工作正常。
for I := 0 to slAttachments.Count -1 do
begin
with TIdAttachment.Create(MailMessage.MessageParts, slAttachments[I]) do
begin
ContentType := 'application/pdf';
end;
end;
使用如下所示的TidText会使发送后的电子邮件正文为空。调试显示sMsg
包含正确的HTML,但它没有随电子邮件一起发送。
MailText := TIdText.Create(MailMessage.MessageParts, nil);
MailText.ContentType := 'text/html';
MailText.Body.Text := sMsg;
如果我直接设置MailMessage
主体,html将显示为纯文本。
MailMessage.Body.Text := sMsg;
完整代码:
//setup mail message
MailMessage.From.Address := msFromAddress;
MailMessage.Recipients.EMailAddresses := sToAddress;
MailMessage.Subject := sSubject;
MailMessage.ContentType := 'multipart/mixed';
// Add Attachments
for I := 0 to slAttachments.Count -1 do
begin
with TIdAttachment.Create(MailMessage.MessageParts, slAttachments[I]) do
begin
ContentType := 'application/pdf';
end;
end;
// Add HTML
MailText := TIdText.Create(MailMessage.MessageParts, nil);
MailText.ContentType := 'text/html';
MailText.Body.Text := sMsg;
我如何发送附件并同时显示HTML?相同的代码在Delphi 10中可以正常工作。由于一些依赖关系,我无法将此项目升级到Delphi 10。由于破坏性更改,Indy也无法升级。
1条答案
按热度按时间goqiplq21#
这似乎是Indy9中的一个错误,在添加附件时第一个TIDText被忽略。添加纯TIDText似乎修复了这个问题。
1.添加纯文本TIdText。
1.添加HTML TIDText和所需的html主体。
1.添加附件。
测试和工作代码如下。第一个包含纯文本的TIDText似乎被忽略,但当删除它的html得到忽略。