Dou*_*oug 5 c# impersonation ews-managed-api office365
private ExchangeService connectToEWS(string email, bool impersonate = false) {
WebCredentials credentials = new WebCredentials(username, password, domain);
ExchangeVersion version = (ExchangeVersion)exchangeVersion;
ExchangeService service = new ExchangeService(version) {
Credentials = credentials,
Url = new Uri("https://outlook.office365.com/ews/exchange.asmx")
};
if (impersonate) {
service.HttpHeaders.Add("X-AnchorMailbox", email);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email); service.CookieContainer = new CookieContainer();
}
service.Timeout = int.MaxValue;
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码创建一个 ExchangeSession 并
ExchangeService service = connectToEWS(email, true);
FolderId msgFolderRoot = WellKnownFolderName.MsgFolderRoot;
FolderView view = new FolderView(int.MaxValue);
view.PropertySet = PropertySet.IdOnly;
var result = service.FindFolders(msgFolderRoot, view);
Run Code Online (Sandbox Code Playgroud)
我在 FindFolders 调用中收到 401 未经授权的异常。如果我使用仅接受 smtp 和密码的 WebCredentials 的其他构造函数,则会收到 503 服务器不可用异常。当我不使用模拟(而是委托访问)时,不会引发异常,并且我可以获取文件夹列表,但我需要能够支持模拟。
我已将 ApplicationImpersonation 角色添加到服务帐户(第一个代码块中的用户名)。是否还需要扮演其他角色?我在 EWS 模拟文档中找不到任何内容。关于此问题的所有其他线程都指向 UPN 用法而不是 smtp,但我相当确定此 smtp 与 UPN 相同。然而,我实际上不知道在 o365 中该去哪里查找。