如果只是一个电子邮件地址,我会连接到收到发送到该地址的电子邮件的邮箱:
ews.autodiscoverUrl(email);
var m = new Mailbox(email);
var folderId = new FolderId(WellKnownFolderName.Inbox, m);
var folder = Folder.Bind(ews,folderId);
有没有办法找出我打开的邮箱类型 - 无论是用户,资源还是共享邮箱?
答案 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
相结合,您可以获取房间的邮箱。但请记住:可能有没有邮箱的房间。
使用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");
一些相关链接: