delphi - 使用 TIdMessageBuilderHtml 设置电子邮件附件名称

标签 delphi smtp indy

我正在尝试使用 Delphi (D10S) 将 PDF 文档附加到电子邮件,并且我想将名称设置为文件系统上文件名称以外的名称。

我发现了以下线程(来自 2011 年),其中 Remy Lebeau 指出,您可以通过在将它们附加到电子邮件时设置 TIdMessageBuilderAttachment 对象的 Name 属性来实现此目的使用TIdMessageBuilderHtml:

How to name attachment files constructed by TIdMessageBuilderHtml

然而,虽然听起来很简单,但它似乎对我不起作用。电子邮件已发送,但附件以原始文件名发送,而不是我指定的文件名。

以下是我希望按照我所描述的方式执行的代码片段,但无论出于何种原因,它都没有执行。在本例中,我希望文件名显示为 desired_filename.pdf,但它显示为 undesired_filename.pdf。出于显而易见的原因,我删除了邮件服务器凭据:

procedure TForm4.Button1Click(Sender: TObject);
var
  FMessageBuilder : TIdMessageBuilderHtml;
  FSMTP : TIdSMTP;
  FMessage : TIdMessage;
  FAttachment : TIdMessageBuilderAttachment;
begin
  FMessage := TIdMessage.Create();
  FMessageBuilder := TIdMessageBuilderHtml.Create;
  FSMTP := TIdSMTP.Create;

  FAttachment := FMessageBuilder.Attachments.Add('c:\undesired_filename.pdf');
  FAttachment.Name := 'desired_filename.pdf';
  FMessageBuilder.FillMessage(FMessage);

  FMessage.Sender.Address := '<Insert Sender Address>';
  FMessage.Sender.Name := '<Insert Sender Name>';
  FMessage.From.Address := '<Insert From Address>';
  FMessage.From.Name := '<Insert From Name>';
  FMessage.Recipients.EMailAddresses := '<Insert Recepient Address>';
  FMessage.Subject := 'Attachment Test';

  FSMTP.Host := '<Insert Mail Host>';
  FSMTP.Username := '<Insert Username>';
  FSMTP.Password := '<Insert Password>';
  FSMTP.Connect;
  FSMTP.Send(FMessage);
  FSMTP.Disconnect;
end;

我已经在 D10S 和 XE 中对此进行了测试,两者的效果相同。你知道我做错了什么吗?

最佳答案

使用接受TStreamTIdMessageBuilderAttachments.Add重载并将TIdMessageBuilderAttachment.FileName属性设置为所需的名称对我来说很有效XE4Indy 10.6.0.4975。

stream := TFileStream.Create('c:\undesired_filename.pdf', fmOpenRead);
FAttachment := FMessageBuilder.Attachments.Add(stream, 'application/pdf');
FAttachment.FileName := 'desired_filename.pdf';

关于delphi - 使用 TIdMessageBuilderHtml 设置电子邮件附件名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793092/

相关文章:

德尔福/ADO : how to get result of Execute()?

delphi - 如何影响 2 个动画对象的 2 个角度?

php - 如何在 SwiftMailer 中关闭 Smtp 连接

javascript - 执行关联的 JavaScript 后如何获取页面的源 HTML?

javascript - 什么是用于 Javascript 语言文件的好的 Delphi 词法分析器/解析器?

ssl - 基于操作系统的证书(ca-bundle.crt)是否可以使用 smtp_tls_CAfile 正常工作

ssl - Go smtp.SendMail 的 X509 证书问题

Delphi Indy - 如何为 Indy 10 的 SSL-TCP 客户端/服务器链接获取 SSL 证书

delphi - 同一应用程序上的多个 TIdCmdTCPServers

oracle - ORA-01426:执行存储过程时出现数字溢出异常