我有一个Delphi 2006 BDS应用程序,其中包含以下代码,用于迭代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中提取JUST邮箱(不是公用文件夹等)及其子序列收件箱和已发送的项目文件夹。有什么想法吗?
答案 0 :(得分:7)
在Outlook文件夹中可以键入并具有DefaultItemType属性。替换
if Pos('MAILBOX', UpperCase(mailbox.Item[i].Name)) > 0 then
与
if (mailbox.Item[i].DefaultItemType = olMailItem) then
应该为您提供默认情况下只存储邮件的文件夹。
邮件消息当然也可以存储在非类型文件夹中,但是作为olMailItem
olMailItem = $00000000;
作为其值,它也是所有无类型文件夹的默认值。因此,默认情况下,任何无类型文件夹都会存储邮件项目。