【发布时间】:2023-02-06 15:43:00
【问题描述】:
我们有一个用 Delphi 7 编写的 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 也无法升级。
【问题讨论】:
-
Delphi 7 使用 Indy 版本。默认情况下为 9,即非常老的。您可以尝试从标准的 Delphi 7 安装中排除 Indy 9,并将最新的 Indy 10 安装到 Delphi 7。期待一些重大变化。
-
你读过 Indy 网站上的 HTML Messages 了吗?使用
TIdMessage.MessageParts和'multipart/mixed'是正确的,副手代码看起来不错,但是为什么要在 HTML 前面而不是后面添加 PDF?从理论上讲,应该工作,但在实践我会把 HTML 放在前面。 -
我已经阅读了其中的一部分,但是没有像我应该的那样正确。那是我获得附件等代码的地方。我不知道应该如何构建包含附件和 HTML 的电子邮件。我将尝试交换它,看看会发生什么。我也会阅读整篇文章。
-
@RemyLebeau 我似乎已经明白了。我不确定它为什么有效。因此,正如您所建议的,我先放置 HTML,然后再放置附件。这并没有改变任何东西。仍然收到一封只有附件的空电子邮件。然后我添加了一个带有“测试消息”正文的纯文本 TIdText 和后记另一个 TIdText 但这次是 HTML。查看电子邮件,好像第一个 TIdText 没有被添加或发送。只有第二个。我怀疑这是 Indy10 中修复的 Indy9 错误。
标签: delphi html-email delphi-7 email-attachments