Delphi - E-mail műveletek az Outlook-ban

Office 13. rész

forráskód letöltése
Elérkeztünk az Office, azon belül is az Outlook programozásáról szóló cikksorozatunk azon részéhez, amiben azt vizsgáljuk, hogy hogyan tudunk e-mailt küldeni az Outlook-on keresztül. Az Outlook alkalmazás használata erre a célra azért is jó, mert az így elküldött e-mail-ek is bekerülnek az Elküldött levelek mappába, tehát bármikor visszakereshetők. Az új e-mail létrehozásához a CreateItem függvényt fogjuk használni. Ennek a függvénynek a segítségével különböző Outlook objektumokat tudunk létrehozni. Az objektum típusát egy OlItemType típusú konstanssal tudjuk megadni, mely a következők egyike lehet: olAppointmentItem (1), olContactItem (2), olJournalItem (4), olMailItem (0), olNoteItem (5), olPostItem (6), vagy olTaskItem (3). Ezek közül mi most az olMailItem konstanst használjuk, aminek következtében a függvény visszatérési értéke egy MailItem objektum lesz, és nekünk éppen erre lesz szükségünk.
A MailItem objektum To property-jébe kell megadnunk az e-mail címet, ahová a levelet küldeni akarjuk. A Subject property a levél tárgya, míg a Body a levél szövege. Ennyi általában elég is, tehát ha ezeket az adatokat megadtuk, akkor a Send metódussal el is küldhetjük az e-mail-t. A Send metódus hatására az új e-mail bekerül az Outlook Postázandó mappájába. Természetesen lehetőség van további adatok megadására, például tetszőleges fájlokat adhatunk hozzá a levélhez mellékletként, illetve megadhatjuk, hogy ki kapjon másolatot, illetve titkos másolatot a levélből.

Létrehozunk egy új MailItem objektumot, melyet az FMailItem változóban tárolunk.
var
  FMailItem: OleVariant;
...
  FMailItem:=FOutlook.CreateItem(olMailItem);
A To property-ében megadjuk a címzett e-mail címét, Subject property-ben pedig a levél tárgyát. Használhatjuk a BCC (Blind Carbon Copy - titkos másolat) és CC (Carbon Copy - másolatot kap) property-ket további címek megadására.
  FMailItem.To:=Edit1.Text;
  FMailItem.Subject:=Edit2.Text;
  FMailItem.BCC:=Edit3.Text;
  FMailItem.CC:=Edit4.Text;
Az e-mail-hez természetesen mellékleteket is csatolhatunk. Ezeket az Attachments property-n keresztül érhetjük el, illetve ennek Add függvényével tudunk új mellékleteket hozzáfűzni az e-mail-hez. A példaprogramban a mellékleteket egy TListBox komponensben tároljuk. Az Add függvény első paramétere annak a fájlnak a neve és elérési útvonala, amit a levélhez szeretnénk csatolni. A második paraméter egy konstans, ami azt határozza meg, hogy milyen módon kell a fájlt csatolni. Ez a következők egyike lehet: olByValue, olByReference, olEmbeddedItem és olOLE.
  i:=0;
  while i<=ListBox1.Items.Count-1 do begin
    FMailItem.Attachments.Add(ListBox1.Items[i], olByValue);
    Inc(i);
  end;
A mellékletek hozzáfűzése után a Body property-ben megadjuk a levél szövegét is. Az AutoForwarded property egy logikai értéket vehet fel. Igaz érték esetén a levelet automatikusan továbbítja. A Save függvénnyel elmentjük az új levelet, ami bekerül a Piszkozatok mappába, ugyanúgy, mintha az Outlook-ból mentettünk volna el egy új levelet.
  FMailItem.Body:=Memo1.Text;
  FMailItem.AutoForwarded:=CheckBox1.Checked;
  FMailItem.Save;
A Display metódussal megjeleníthetjük a levelet, mielőtt elküldenénk. Ezt a példaprogramban úgy oldottuk meg, hogy ha a CheckBox2 komponens Checked property-je igaz, akkor megjelenítjük, ellenkező esetben pedig a Send függvénnyel elküldjük a levelet. Ez utóbbi esetben az e-mail bekerül a Postázandó üzenetek mappába.
  if CheckBox2.Checked then begin
    FMailItem.Display;
  end else begin
    FMailItem.Send;
  end;
A MailItem objektumnak számos más property-je és eljárása van, amiket nem csak új levelek létrehozásánál, hanem régebbi e-mail-ek tulajdonságainak lekérdezésénél is használhatunk. Ezekből néhányra láthattunk példát a cikksorozat előző részében, tehát most csak azokat ismertetjük, amelyek még nem kerültek szóba. Ilyen például a Recipients property, melyen keresztül egy listát kapunk az e-mail címzettjeiről. A Recipients.Count property-ből kiolvasható, hogy a levélnek hány címzettje van. Az Item függvényen keresztül lekérdezhetők az egyes címzettek, paraméterként megadva a címzett indexét. A függvény visszatérési értéke egy Recipient objektum, amiből kiolvashatók a címzett adatai.
A SentOn property visszaadja a levél elküldésének dátumát és időpontját.
Ha a levél még nem lett megnyitva (elolvasva), akkor az UnRead property értéke igaz, ellenkező esetben hamis.
A UserProperties objetumot használhatjuk arra, hogy a levél egyéni tulajdonságait lekérdezzük. Ez egy lista, hasonlóan a Recpients property-hez, amiből UserProperty típusú objektumokat tudunk elérni. Hogy pontosan miről is van szó, jobban megértjük, ha megnézzük, hogy az Outlook-ból ez hogyan történik. A lista fejlécén kattintsunk a jobb egérgombbal, majd válasszuk a "Jelenlegi megjelenítés testreszabása…" menüpontot. Kattintsunk a "Mezők" gombra, és a megjelenő ablakban látni fogjuk, hogy milyen adatokat érhetünk el (mezők) a UserProperties objektumon keresztül. Egy MailItem objektumnál ez a property csak olvasható, új tulajdonságokat nem hozhatunk létre.
Ha egy MailItem objektumról másolatot szeretnénk készíteni, akkor használjuk a Copy függvényt. A függvény az összes Outlook elemnél használható, nem csak a MailItem-nél. Jól használható a Move függvénnyel együtt arra, hogy a levelekről másolatot készítsünk egy másik mappában. A Move függvény a levelet "átmozgatja" a megadott mappába, és az eredeti helyéről törli azt.
var
  MailItem1: OleVariant;
  CopyOfMailItem1: OleVariant;
...
  CopyOfMailItem1:= MailItem1.Copy;
  CopyOfMailItem1.Move(MyNewFolder);
A PrintOut metódussal kinyomtathatjuk a levelet, az alapbeállításokat használva.
A Reply függvény akkor használható ki, amikor egy levélre válaszolni akarunk. A függvény visszatérési értéke ugyanis egy olyan MailItem objektum, aminek címzettjéhez beírja az eredeti levél küldőjének címét.
  ReplyMail := MailItem1.Reply;
  ReplyMail.Body := 'Megkaptam!';
  ReplyMail.Send;
Ha már nincs szükségünk a levélre, akkor a Delete függvénnyel törölhetjük azt.


Office cikksorozat