Я понимаю, что это старая тема, но у меня недавно была та же самая проблема для пользователей с Outlook 2016. Для меня решение должно было включать подпись и вложение и открывать новое окно Outlook сверху. Если вы вызываете MailItem.Display (True), вы теряете вложение. Это было решение, которое работало для меня.
Обратите внимание на дополнительный пробел после «Message (HTML)» в имени окна. Мне потребовалось много времени, чтобы обнаружить, что имя окна для новых электронных писем в формате HTML имеет дополнительный пробел в конце.
procedure DisplayMail(Address, Subject, Body: string; Attachment: TFileName);
var
Outlook: OleVariant;
Mail: OleVariant;
H : THandle;
TempTitle : String;
begin
TempTitle := 'Temp-'+IntToStr(Random(1000000));
try
Outlook := GetActiveOleObject('Outlook.Application');
except
Outlook := CreateOleObject('Outlook.Application');
end;
Mail := Outlook.CreateItem(olMailItem);
Mail.To := Address;
Mail.Subject := TempTitle;
Mail.Display(false);
H := FindWindow('rctrl_renwnd32',PWidechar(TempTitle+' - Message (HTML) '));
Mail.Subject := Subject;
if Body <> '' then
Mail.HTMLBody := InsertMessage(Body,Mail.HTMLBody);
if Attachment <> '' then
Mail.Attachments.Add(Attachment);
try
if H <> 0 then
SetForegroundWindow(H);
finally
end;
end;
Это сработало для меня, и оно позволяет мне добавлять вложения и сохраняет подпись по умолчанию. Надеюсь, это кому-нибудь поможет.