Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 86. - Microsoft Outlook (načtení struktury složek, odesílání pošty)

Jan Šindelář - 16.4.2003

Načtení struktury složek

Nejprve začneme načtením struktury složek v aplikaci Outlook. Jedná se o klasický strom, kde v případě Outlooku, na rozdíl od běžných programů sloužících pouze k odesílání pošty, naleznete také všechny ostatní složky jako jsou úkoly a podobně.

Celou tuto strukturu se tedy naučíme načíst a kam jinam než do komponenty TreeView. Zřejmě asi už nemusím připomínat, že opět využijeme technologie OLE a bude potřeba jednotka ComObj. Připravte si na formulář komponentu TreeView a tlačítko, kterým bude celá funkce aktivována.

procedure RetrieveOutlookFolders(tvFolders: TTreeView);
  procedure LoadFolder(ParentNode: TTreeNode; Folder: OleVariant);
  var
    i: Integer;
    Node: TTreeNode;
  begin
    for i := 1 to Folder.Count do
    begin
      Node := tvFolders.Items.AddChild(ParentNode, Folder.Item[i].Name);
      LoadFolder(Node, Folder.Item[i].Folders);
    end;
  end;
var
  Outlook, NameSpace: OLEVariant;
begin
  try
    Outlook := CreateOleObject(`Outlook.Application`);
    NameSpace := outlook.GetNameSpace(`MAPI`);
    LoadFolder(nil, NameSpace.Folders);
  finally
    outlook := Unassigned;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RetrieveOutlookFolders(TreeView1);
end;

Jak vidíte, funkce má jeden jediný parametr, kterým je příslušný TreeView, do které bude struktura načtena.

Odesílání pošty

A dostáváme se k druhému dnešnímu tématu. Když už jsme si minule ukázali, jak získat seznam kontaktů, jistě se bude hodit i funkce na samotné odesílání pošty. Emailová zpráva bude obsahovat všechny hlavní náležitosti, na které jste zvyklí, a rovněž si zkusíme připojit soubor jako přílohu.

procedure TForm1.Button2Click(Sender: TObject);
const
  olMailItem = 0;
  olByValue = 1;
var
  OutlookApp, MailItem, MyAttachments: OLEVariant;
begin
  try
    OutlookApp := GetActiveOleObject(`Outlook.Application`);
  except
    OutlookApp := CreateOleObject(`Outlook.Application`);
  end;
  try
    MailItem := OutlookApp.CreateItem(olMailItem);
    MailItem.Recipients.Add(`adresat@email.cz`);
    MailItem.Subject := `Subjekt`;
    MailItem.Body := `Text emailu`;
    myAttachments := MailItem.Attachments;
    myAttachments.Add(`C:\Test.txt`, olByValue, 1, `Nazev prilohy`);
    MailItem.Send;
  finally
    myAttachments := VarNull;
    OutlookApp := VarNull;
  end;
end;

Vytvořená zpráva se přesune do složky Outbox a bude případně hned odeslána. Spojíte-li šikovně tento příklad s načítáním kontaktů z minulého dílu, není problém ani hromadné rozesílání pošty včetně konkrétního osobního oslovení dotyčného adresáta namísto nějakého obecného úvodu.