Объектная модель Outlook - обнаружение почтовых ящиков - PullRequest
0 голосов
/ 31 марта 2011

У меня есть приложение BDS Delphi 2006 со следующим кодом для итерации почтовых ящиков outlook, а затем входящие и отправленные элементы в почтовом ящике:

  try
    nameSpace := outlook.GetNameSpace('MAPI');
    // load the mailboxes
    mailbox := NameSpace.Folders;

    for i := 1 to mailbox.Count do
      if Pos('MAILBOX', UpperCase(mailbox.Item[i].Name)) > 0 then
      begin
        rootNode := trvwOutlookFolders.Items.AddChildObject(nil, mailbox.Item[i].Name, nil);

        for j := 1 to mailbox.Item[i].Folders.Count do
          if (Pos('INBOX', UpperCase(mailbox.Item[i].Folders[j].Name)) > 0) or
             (Pos('SENT ITEMS', UpperCase(mailbox.Item[i].Folders[j].Name)) > 0) then
          begin
        // do processing
          end;

      end;

  finally
    outlook := Unassigned;
  end;
end;

Код отлично работает в Outlook 2007, но не в 2010, потому что в почтовых ящиках нет слова «Почтовый ящик». Поэтому я использую альтернативный метод извлечения только почтовых ящиков (не общих папок и т. Д.) Из Outlook и их подпоследовательности папок «Входящие» и «Отправленные». Есть идеи?

1 Ответ

7 голосов
/ 31 марта 2011

В Outlook можно вводить папки и иметь свойство DefaultItemType. Замена

if Pos('MAILBOX', UpperCase(mailbox.Item[i].Name)) > 0 then

с

if (mailbox.Item[i].DefaultItemType = olMailItem) then

должен предоставить вам папки, в которых по умолчанию хранятся только почтовые сообщения.

Почтовые сообщения, конечно, могут храниться и в нетипизированных папках, но, как и у olMailItem,

olMailItem = $00000000;

в качестве значения также используется по умолчанию для всех нетипизированных папок. Так что в основном в любой нетипизированной папке по умолчанию хранятся почтовые элементы.

...