You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Indy9添加附件后无法正确发送HTML邮件问题求助

解决Delphi7 Indy发送带附件的HTML邮件问题

在Delphi7自带的Indy版本(多为Indy9)中,MIME邮件结构的处理逻辑比新版本更严格,直接将HTML文本和附件并列放入MessageParts无法被邮件客户端正确解析。需要采用嵌套MIME结构实现:外层用multipart/mixed容纳正文容器和附件,正文部分用multipart/alternative同时提供HTML和纯文本版本(纯文本作为兼容 fallback)。

修正后的代码示例

var
  MailMessage: TIdMessage;
  slAttachments: TStringList;
  I: Integer;
  AltPart: TIdMultipart;
  PlainText, HtmlText: TIdText;
begin
  // 初始化邮件基础信息
  MailMessage := TIdMessage.Create(nil);
  try
    MailMessage.From.Address := msFromAddress;
    MailMessage.Recipients.EMailAddresses := sToAddress;
    MailMessage.Subject := sSubject;
    // 外层设置为multipart/mixed,用于容纳正文容器和附件
    MailMessage.ContentType := 'multipart/mixed';

    // 创建multipart/alternative容器,用于存放纯文本和HTML正文
    AltPart := TIdMultipart.Create(MailMessage.MessageParts);
    AltPart.ContentType := 'multipart/alternative';

    // 添加纯文本版本(可选但推荐,兼容不支持HTML的客户端)
    PlainText := TIdText.Create(AltPart.MessageParts, nil);
    PlainText.ContentType := 'text/plain; charset=utf-8';
    PlainText.Body.Text := '请使用支持HTML的邮件客户端查看此邮件';

    // 添加HTML版本
    HtmlText := TIdText.Create(AltPart.MessageParts, nil);
    HtmlText.ContentType := 'text/html; charset=utf-8';
    HtmlText.Body.Text := sMsg; // 你的HTML内容

    // 添加附件
    slAttachments := TStringList.Create;
    try
      // 假设slAttachments已填充附件路径
      for I := 0 to slAttachments.Count - 1 do
      begin
        with TIdAttachment.Create(MailMessage.MessageParts, slAttachments[I]) do
        begin
          ContentType := 'application/pdf';
        end;
      end;
    finally
      slAttachments.Free;
    end;

    // 此处补充TIdSMTP发送邮件的逻辑
  finally
    MailMessage.Free;
  end;
end;

关键说明

  • 必须嵌套multipart/alternative:老Indy不会自动将单独的text/html识别为邮件正文,需要把正文内容放在multipart/alternative容器中,让邮件客户端选择显示HTML或纯文本版本。
  • 编码指定:添加charset=utf-8避免中文乱码问题。
  • 避免直接设置MailMessage.Body:当使用MessageParts自定义MIME结构时,直接设置Body会干扰MIME解析,导致正文显示异常。

内容的提问来源于stack exchange,提问作者Adriaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:56:03