2009. november 12., csütörtök

Outlook Automation - Scaning Outlook's Folders and reading Mail


Problem/Question/Abstract:

How to serf in Outlook from myself application and read Mail

Answer:

unit UScanOutlook;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, Outline;
const
  olByValue = 1;
  olByReference = 4;
  olEmbeddedItem = 5;
  olOLE = 6;

  olMailItem = 0;
  olAppointmentItem = 1;
  olContactItem = 2;
  olTaskItem = 3;
  olJournalItem = 4;
  olNoteItem = 5;
  olPostItem = 6;

  olFolderDeletedItems = 3;
  olFolderOutbox = 4;
  olFolderSentMail = 5;
  olFolderInbox = 6;
  olFolderCalendar = 9;
  olFolderContacts = 10;
  olFolderJournal = 11;
  olFolderNotes = 12;
  olFolderTasks = 13;

type
  TItem = class(TObject)
    Letter: OleVariant;
      name: string;
  end;
  TForm1 = class(TForm)
    oline_outlook: TOutline;
    Button8: TButton;
    procedure Button8Click(Sender: TObject);
    procedure oline_outlookDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
    OlApp, NameSpace, root: OleVariant;
    List: Tlist;
    Item: TItem;
    icount: integer;
  end;

var
  Form1: TForm1;

implementation
uses ComObj;
{$R *.DFM}

procedure TForm1.Button8Click(Sender: TObject);
  procedure scan(ol: TOutline; root: OleVariant; s: string);
  var
    i, j, k: integer;
    bcount, rcount: integer;
    branch, MAPIFolder: olevariant;
    line: string;
  begin
    line := '';
    rcount := root.count;
    for i := 1 to rcount do
    begin
      line := s + root.item[i].name;
      ol.Lines.Add(line);
      List.Add(TItem.Create);
      Item := List.items[List.count - 1];
      Item.name := 'Folder';
      branch := root.item[i].folders;
      bcount := branch.count;
      MAPIFolder := Namespace.GetFolderFromId(root.item[i].EntryID,
        root.item[i].StoreID);
      if MAPIFolder.Items.count > 0 then
        for j := 1 to MAPIFolder.Items.count do
        begin
          ol.Lines.Add(s + ' ' + MAPIFolder.Items[j].subject);
          List.Add(TItem.Create);
          Item := List.items[List.count - 1];
          Item.name := 'File';
          Item.Letter := MAPIFolder.Items[j];
        end;
      if bcount > 0 then
      begin
        scan(ol, branch, s + ' ');
      end;
    end;
  end;
begin
  oline_outlook.Lines.Clear;
  OlApp := CreateOleObject('Outlook.Application');
  Namespace := OlApp.GetNameSpace('MAPI');
  root := Namespace.folders;
  scan(oline_outlook, root, '');
end;

procedure TForm1.oline_outlookDblClick(Sender: TObject);
begin
  Item := List.items[oline_outlook.SelectedItem - 1];
  if Item.name = 'File' then
    ShowMessage(Item.Letter.Body);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  List := TList.Create;
  Item := TItem.Create;
  icount := 0;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  i: integer;
begin
  for i := List.Count - 1 downto 0 do
  begin
    Item := List.Items[i];
    Item.Free;
  end;
  List.Free;
end;

end.

Nincsenek megjegyzések:

Megjegyzés küldése