Объектная модель 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;
в качестве значения он также используется по умолчанию для всех нетипизированных папок. Так что в основном в любой нетипизированной папке по умолчанию хранятся почтовые элементы.