仅给出一个电子邮件地址,我连接到邮箱,该邮箱接收发送到该地址的电子邮件:

ews.autodiscoverUrl(email);
var m = new Mailbox(email);
var folderId = new FolderId(WellKnownFolderName.Inbox, m);
var folder = Folder.Bind(ews,folderId);


有没有办法找出我打开的邮箱类型-是用户邮箱,资源邮箱还是共享邮箱?

最佳答案

您可以通过调用ResolveName找到给定电子邮件地址的邮箱类型:

var mailboxes = ews.ResolveName(email);
if (mailboxes.Any()) {
    var mailbox = mailboxes.First();
    if (mailbox.MailboxType == MailboxType.PublicFolder) {
        // your magic
    }
}


参见此MSDN page for the possible values of the MailboxType

更新资料

普通邮箱和会议室邮箱没有区别。如果要了解Exchange服务器中存在哪些房间,可以使用the EWS GetRoomLists and GetRooms functions

通过将上面的片段与GetRoomLists / GetRooms结合使用,您可以获得一个房间的邮箱。但请记住:有些房间可能没有邮箱。

更新2

使用GetRoomLists / GetRooms的方法是唯一一种允许您使用EWS识别房间邮箱的方法。但这确实要求您将房间添加到房间列表中,这可能需要贿赂一两个管理员。

另一种方法是在Active Directory中查找相关信息,这显然是Outlook所做的。参见以下MSDN thread for a more elaborate explanation,但这是要点:


  Outlook具有自己的目录界面,它不使用EWS来获取此信息。如果您仅要使用EWS,则需要让管理员创建房间列表供您使用。


最后一种选择是使用PowerShell获取邮箱类型。这就是我刚用来在Exchange Online服务器中获取会议室的内容:

PS H:\> Get-Mailbox | Where {$_.ResourceType -eq "Room"}


输出:

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       -----------------
Frank's room              franksroom           db3pr03mb058     49.5 GB (53,150,220,288 bytes)


另一个产生相同输出的示例:

PS H:\> Get-Mailbox -Filter '(RecipientTypeDetails -eq "RoomMailBox")'


通过此输出,我可以使用以下任一方式获取邮箱:

exchange.ResolveName("Frank's room");
exchange.ResolveName("franksroom@myorganization.onmicrosoft.com");


一些相关的链接:


PowerShell commands for Room mailbox management
Connect to Exchange Online using PowerShell

10-04 12:31
查看更多