我試圖使用Delphi(D10S)將PDF文檔附加到電子郵件中,並且想要將名稱設置爲文件系統上文件的名稱以外的名稱。使用TIdMessageBuilderHtml設置電子郵件附件名
我發現下面的線(2011年),其中雷米勒博說,你可以通過設置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中測試了這一點,兩者都做同樣的事情。任何想法我做錯了什麼?
upvoted:從來沒有惹過這個傢伙! – fantaghirocco
哇,我從來沒有想過你來回答這個問題!謝謝!如果在'TIdMessageBuilderAttachment'上設置'name'屬性只會更新'Content-Type'頭部,但'Content-Disposition'(填充我的'FileName')優先,那麼這是否意味着你在我鏈接的線程中給出的例子有同樣的問題,還是有一些微妙的差異,我錯過了?我只是假設他看起來很滿意你的答案。 –
前面的例子會遭受同樣的問題。這是「TIdMessageBuilder」的一個限制,在我第一次寫入時我沒有考慮到,所以我將不得不對它進行更新以解決此問題,可能需要使用新屬性。 –