Outlook对象模型 - 检测邮箱

PDM*_*PDM 0 delphi automation ole outlook-object-model

我有一个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;
Run Code Online (Sandbox Code Playgroud)

该代码在Outlook 2007下正常工作,但在2010年没有,因为邮箱不包含"邮箱"一词.因此,我采用另一种方法从Outlook中提取JUST邮箱(不是公用文件夹等)及其子序列收件箱和已发送的项目文件夹.有任何想法吗?

Mar*_*ema 7

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

if Pos('MAILBOX', UpperCase(mailbox.Item[i].Name)) > 0 then
Run Code Online (Sandbox Code Playgroud)

if (mailbox.Item[i].DefaultItemType = olMailItem) then
Run Code Online (Sandbox Code Playgroud)

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

邮件消息当然也可以存储在非类型文件夹中,但是就像olMailItem一样

olMailItem = $00000000;
Run Code Online (Sandbox Code Playgroud)

作为其值,它也是所有无类型文件夹的默认值.所以基本上任何无类型文件夹默认存储邮件项目.