如何选择邮箱

How to choose a mailbox

我在MS Outlook有两个邮箱。我需要从其中一个那里得到邮件。如何select一个特定的邮箱?我安装了 Office 365。需要在 Logon ('', '', true, true); ?

中设置一些内容

我的代码

zOutlook := TOutlookApplication.Create(nil);
try
  zOutlook.ConnectKind := ckNewInstance;
  try
    zOutlook.Connect;
    try
      zNameSpace := zOutlook.GetNamespace('MAPI');
      zNameSpace.Logon('', '', true, true);
      try
        zInbox := zNameSpace.GetDefaultFolder(olFolderInbox);
        zInboxUnread := zInbox.Items.Restrict('[Unread]=true');
        FCodeSite.Send('zInboxUnread.Count ' + IntToStr(zInboxUnread.Count));
        for i := 1 to zInboxUnread.Count do
        begin
            //..
        end;
      finally
        zNameSpace.Logoff;
      end;
    finally
      zOutlook.Disconnect;
    end;

  except
    on E: SysUtils.Exception do
    begin
      FCodeSite.SendError(E.Message);
    end;
  end;
finally
  zOutlook.Free;
end;

我已经修复了你的代码。

想法是在两个级别迭代文件夹:邮箱和邮箱中的文件夹。

已使用 Oultook 2019 进行测试。应该也适用于其他版本。

procedure TForm1.Button1Click(Sender: TObject);
var
    zOutlook     : TOutlookApplication;
    zNameSpace   : _NameSpace;
    zInbox       : MAPIFolder;
    zFolder      : MAPIFolder;
    zInboxUnread : _Items;
    I            : Integer;
    Found        : Boolean;
    MailBoxName  : String;
    InboxName    : String;
begin
    MailBoxName := 'francois.piette@company.com';
    InboxName   := 'Boîte de réception';
    zOutlook := TOutlookApplication.Create(nil);
    try
      zOutlook.ConnectKind := ckNewInstance;
      try
        zOutlook.Connect;
        try
          zNameSpace := zOutlook.GetNamespace('MAPI');
          zNameSpace.Logon('', '', true, true);
          try
            Found := FALSE;
            for I := 1 to zNameSpace.Folders.Count do begin
                zFolder := zNameSpace.Folders.Item(I);
                if SameText(zFolder.Name, MailBoxName) then begin
                    Found := TRUE;
                    break;
                end;
            end;
            if not Found then
                Exit;

            Found := FALSE;
            for I := 1 to zFolder.Folders.Count do begin
                zInbox := zFolder.Folders.Item(I);
                if SameText(zInbox.Name, InboxName) then begin
                    Found := TRUE;
                    break;
                end;
            end;
            if not Found then
                Exit;
            zInboxUnread := zInbox.Items.Restrict('[Unread]=true');
            for i := 1 to zInboxUnread.Count do begin
                //..
            end;
          finally
            zNameSpace.Logoff;
          end;
        finally
          zOutlook.Disconnect;
        end;
      except
        on E: System.SysUtils.Exception do begin
          Memo1.Lines.Add(E.Message);
        end;
      end;
    finally
      zOutlook.Free;
    end;
end;

遍历 Namespace.Stores 集合并调用 Store.GetDEefaultFolder(olFolderInbox) 而不是 NameSpace.GetDefaultFolder

您可能需要查看 Store.ExchangeStoreType 属性 以确保您只处理主 Exchange 邮箱。