您可以通过拨打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。
将上面的sn-p和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");
一些相关链接: