Я пытаюсь прикрепить PDF-документ к электронному письму с помощью Delphi (D10S), и я хотел бы установить имя для чего-то другого, кроме имени файла в файловой системе.Настройка имени вложения электронной почты с помощью TIdMessageBuilderHtml
Я нашел следующую нить (с 2011 года), где Реми Лебо утверждает, что вы можете добиться этого, установив Name
свойство TIdMessageBuilderAttachment
объекта при подключении их к электронной почте с помощью 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 и ХЕ и оба делают то же самое. Любые идеи, что я делаю неправильно?
upvoted: никогда не возиться с этим парнем! – fantaghirocco
Ничего себе, я никогда не ожидал, что ты придешь и ответишь на это! Благодаря! Если установка свойства «name» в «TIdMessageBuilderAttachment» обновляет заголовок «Content-Type», но «Content-Disposition» (заполненное «FileName») имеет приоритет, означает ли это, что пример, который вы дали в связанном с ним потоке есть эта же проблема, или есть какая-то тонкая разница, которую я пропустил? Я просто предположил, что работал так, как будто он был доволен вашим ответом. –
Более ранний пример будет страдать от одной и той же проблемы. Это ограничение «TIdMessageBuilder», которое я не учитывал при первом написании, поэтому мне придется сделать для него обновление, чтобы учесть это, возможно, с новым свойством. –