【问题标题】:Outlook Object Model - Detecting MailboxesOutlook 对象模型 - 检测邮箱
【发布时间】:2011-03-31 18:54:33
【问题描述】:

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

【问题讨论】:

    标签: delphi automation ole outlook-object-model


    【解决方案1】:

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

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

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

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

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

    olMailItem = $00000000;
    

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

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2019-05-28
      • 1970-01-01
      • 2020-11-02
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2020-06-03
      相关资源
      最近更新 更多