Delphi - HTML formátumú e-mail küldése az Outlook-kal programból

forráskód letöltése
Lapunk hasábjain korábban is jelentek meg olyan cikkek, melyekben azt mutattuk be, hogy hogyan tudunk az Outlook használatával e-mail-eket küldeni. Ez az újabb példa annyiban különbözik az előzőektől, hogy HTML formátumú levelet küldünk, ami természetesen képeket is tartalmaz! Első lépésben kapcsolódunk az Outlook-hoz, amit rögtön a Form OnCreate eseményénél teszünk meg. A uses kulcsszó után hivatkoznunk kell a ComObj és ActiveX unit-okra.
procedure TForm1.FormCreate(Sender: TObject);
begin
  FOutlook:=CreateOleObject('Outlook.Application');
end;
Az e-mailt a Button1 OnClick eseményénél állítjuk elő. Ehhez létre kell hozni egy MailItem objektumot, melyen keresztül az új e-mail tulajdonságait adhatjuk meg. Az Outlook-ban többféle elemet is létrehozhatunk (e-mail, találkozó, stb.), ezért a CreateItem függvény paramétereként meg kell adni az elem típusát. Ez e-mail esetében 0. Ha Type Library-t használunk, akkor megadhatjuk konstanssal is: olMailItem.
  MailItem:=FOutlook.CreateItem(0);
A MailItem objektum To property-jében tudjuk megadni a címzett e-mail címét, a Subject property-ben pedig a levél tárgyát.
  MailItem.To:='animare@animare.hu';
  MailItem.Subject:='HTML levél próba';
Mivel HTML formátumú levélről van szó, a levél szövegét nem a Body, hanem a HTMLBody property-ben kell megadni. Amikor ennek a property-nek értéket adunk, akkor a levél formátuma automatikusan HTML lesz. Ha viszont a Body property-nek adunk értéket, akkor egyszerű szövegként jelenik meg.
  MailItem.HTMLBody:=Template.Text;
Aki egy kicsit is ismeri a HTML formátumot, az tudja, hogy a HTML oldalon megjelenő képek nem magában a HTML fájlban vannak, hanem csak egy hivatkozás van rájuk. Direkt hivatkozást nem használhatunk, mert akkor csak a levél megy el, a képek nem. A megoldás az, hogy a levélben használt képeket mellékletként hozzá kell csatolni a levélhez az Attachments.Add függvénnyel. Első paraméterként meg kell adni a képfájl nevét az elérési útvonallal együtt. A második paraméter a csatolás típusát határozza meg. Ezek a következők lehetnek (ha nem használunk Type Library-t, akkor a konstans neve helyett a zárójelben lévő számot kell megadni!):
  • olByReference (4): hivatkozás a fájlra;
  • olByValue (1): beágyazza a fájlt (erre lesz szükségünk most!);
  • olEmbeddedItem (5): hivatkozás egy Outlook elemre.
A harmadik paraméter a csatolt elem pozíciója, míg a negyedik egy név. A fájl nevén kívül az összes paraméter opcionális, de nekünk most az első hármat meg kell adnunk.
A példában szereplő levél két képet tartalmaz, ezek mindegyikét csatoljuk a levélhez.
  MailItem.Attachments.Add(ExtractFilePath(Application.ExeName)+'images\logo.gif', 1, 0);
  MailItem.Attachments.Add(ExtractFilePath(Application.ExeName)+'images\dso.gif', 1, 0);
Most már nincs más hátra, mint a levél mentése, és elküldése. Az új levél bekerül az Outlook „Postázandó üzenetek” mappájába.
  MailItem.Save;
  MailItem.Send;
A programból való kilépéskor bezárjuk az Outlook-ot:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FOutlook.Quit;
end;