0

我有一个 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 及其子序列收件箱和已发送项目文件夹中提取邮箱(不是公用文件夹等)的替代方法。有任何想法吗?

4

1 回答 1

7

在 Outlook 文件夹中可以键入并具有 DefaultItemType 属性。更换

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

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

应该为您提供默认情况下仅存储邮件的文件夹。

邮件消息当然也可以存储在无类型的文件夹中,但正如 olMailItem

olMailItem = $00000000;

作为它的值,它也是所有无类型文件夹的默认值。因此,默认情况下,基本上任何未键入的文件夹都存储邮件项目。

于 2011-03-31T10:54:33.467 回答