Объектная модель Outlook - обнаружение почтовых ящиков

У меня есть приложение 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 ответ

Решение

В Outlook папки могут быть набраны и иметь свойство DefaultItemType. Замена

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

с

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

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

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

olMailItem = $00000000;

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

Другие вопросы по тегам