In passato ci ho perso un bel po' di tempo anche io, prova con questa:
xMail : String;
xCC : String;
xSubj : String;
xBody : String;
xAttch: Array of String;
PROCEDURE RunOutlook;//compilo outlook
const olMailItem = $00000000;
var Outlook : OleVariant;
vMailItem : Variant;
Var1 : Byte;
BEGIN
//verifica installazione outlook
Try Outlook := GetActiveOleObject('Outlook.Application');//se già aperto
Except
Screen.Cursor := crHourGlass;
Try Outlook := CreateOleObject('Outlook.Application');//prova ad aprirlo
Except//non installato
Screen.Cursor := crDefault;
//RunDefShell;//lancio il default
Exit;
End;
End;
//sostituisce il carattere di invio
xBody := StringReplace(xBody,'%0D%0A',#13#10,[rfReplaceAll,rfIgnoreCase]);
//compila outlook e lancia
Try Try vMailItem := Outlook.CreateItem(olMailItem);
vMailItem.Recipients.Add(xMail);
vMailItem.CC := xCC;
vMailItem.Subject := xSubj;
vMailItem.Body := xBody;
If FilesCount>0 Then //allegati
For Var1:=0 To FilesCount-1 Do
vMailItem.Attachments.Add(xAttch[Var1]);
//vMailItem.Send;//invia e-mail automaticamente
//Attendi(0,500);
vMailItem.Display(False); //(true) mostra e attende
Finally
Try VarClear(Outlook); Except End;
Screen.Cursor := crDefault;
End;
Except
End;
END;