我正在尝试使用Delphi(D10S)将PDF文档附加到电子邮件中,并且我想将名称设置为文件系统上文件名以外的名称.
我找到了以下主题(来自2011年)Remy Lebeau声明您可以通过使用以下Name方法将TIdMessageBuilderAttachment对象附加到电子邮件时设置对象的属性来实现此目的TIdMessageBuilderHtml:
然而,听起来很简单,它似乎对我不起作用.电子邮件通过,但附件是原始文件名,而不是我指定的文件名.
以下是我希望按照我的描述进行的代码片段,但无论出于何种原因,它都没有.在这种情况下,我希望文件名通过desired_filename.pdf,但它来自as 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;
Run Code Online (Sandbox Code Playgroud)
我在D10S和XE中对此进行了测试,两者都是这样做的.我有什么想法我做错了吗?
在XE4,Indy 10.6.0.4975 上使用TIdMessageBuilderAttachments.Add接受a TStream并将TIdMessageBuilderAttachment.FileName属性设置为所需名称的重载对我来说是个窍门.
stream := TFileStream.Create('c:\undesired_filename.pdf', fmOpenRead);
FAttachment := FMessageBuilder.Attachments.Add(stream, 'application/pdf');
FAttachment.FileName := 'desired_filename.pdf';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |