Я генерирую электронные письма с вложениями через программу Delphi, используя Indy 10 и TIdAttachment.Расположение / имя файла хранится в таблице базы данных как //server/files/attachments/MyAttachment.pdf.Я прикрепляю файл к электронному письму следующим образом:
// Add each attachment in Attachments
for Attachment in Attachments do begin
// Make sure file name exists before trying to add
if FileExists(Attachment) then
TIdAttachmentFile.Create(MessageParts, Attachment);
end;
Когда я отправляю электронное письмо, прикрепленный файл называется
'__server_files_attachments_MyAttachment.pdf'
.
Есть ли способудалить путь к файлу, чтобы вложение отображалось как «MyAttachment.pdf», когда получатель получает электронное письмо?
Я пытался использовать ExtractFileName (), но безуспешно.Я не думаю, что это работает, поскольку путь и имя файла поступают из базы данных в виде одной строки.
РЕДАКТИРОВАТЬ
Я также пытался извлечь само имя файласледующим образом:
function GetFileName(FullPath: string): string;
var
StrFound: TStringList;
begin
StrFound := TStringList.Create();
ExtractStrings(['/'], [' '], PChar(FullPath), StrFound);
result := StrFound[StrFound.Count - 1];
end;
Возвращает «MyAttachment.pdf», но в результате Delphi ищет в папке, в которой работает программа, файл, а не в «// server / files / attachments».Похоже, что если я не могу переименовать вложение после вызова TIdAttachmentFile.Create (), я не могу изменить имя файла.
РЕДАКТИРОВАТЬ - РЕШЕНИЕ
Отображение решения с использованием комментариев Реми(и используя GetFileName()
сверху):
// Add each attachment in Attachments
for Attachment in Attachments do begin
// Make sure file name exists before trying to add
if FileExists(Attachment) then begin
with TIdAttachmentFile.Create(MessageParts, Attachment) do begin
Filename := GetFileName(Attachment);
end;
end;
end;