EWS获取邮箱类型(用户/资源/共享)

时间:2014-06-26 09:47:34

标签: c# exchangewebservices

如果只是一个电子邮件地址,我会连接到收到发送到该地址的电子邮件的邮箱:

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

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

1 个答案:

答案 0 :(得分:5)

您可以致电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");

一些相关链接: