Sidenote 1 :我之前已经看过几次这个话题,但大多数>没有解决,其余的与我的问题没有关系。
Sidenote 2 :不要对参数的使用感到困惑,我在代码中做了一些调整,因此它适合SO。这里的参数不是问题。
我试图为我开发一种从功能邮箱中读取电子邮件的方法。此时我想要访问邮箱一般,所以我看看我是否可以在自己的邮箱中阅读邮件。
然而,似乎有些不对劲。一旦它尝试运行 service.FindItems(inbox, fView)
方法,它就会给我以下错误消息:
Microsoft.Exchange.WebServices.Data.ServiceResponseException: Unable to access an account or mailbox.
此时我不确定它是与凭据有关还是与访问权限有关。以下是我正在使用的代码。
我触发了我创建的辅助方法:
FindItemsResults<Item> items = ExchangeWebServiceHelper.GetEmailsFromFolder(inboxName);
在ExchangeWebServiceHelper中,我有以下两种方法:
public static ExchangeService CreateConnection()
{
string url = WebConfigurationManager.AppSettings["EWSAsmxUrlNp"];
ServicePointManager.ServerCertificateValidationCallback = delegate(
Object obj,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors)
{
return true;
};
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Url = new Uri(url);
service.UseDefaultCredentials = true;
return service;
}
public static FindItemsResults<Item> GetEmailsFromFolder(Mailbox mailbox)
{
ExchangeService service = CreateConnection();
FolderView fView = new FolderView(100);
fView.PropertySet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName);
FolderId inbox = new FolderId(WellKnownFolderName.Inbox);
FindItemsResults<Item> results = service.FindItems(inbox, fView);
Logger.Log(mailbox.ToString());
Logger.Log(results.TotalCount.ToString());
return results;
}
答案 0 :(得分:0)
根据Microsoft Dev Center,您无法将.UseDefaultCredentials = true
用于Exchange OnLine。
<强>说明强>
将UseDefaultCredentials属性设置为true会自动设置 将Credentials属性设置为空引用(在Visual中为Nothing) 碱性)。
如果用户的邮箱作为Exchange Online或Exchange Online托管,则无法使用登录用户的默认凭据 of Office 365 。而是使用Credentials属性来设置 用户的凭据。用户的凭据必须是用户主体 Exchange Online的名称(UPN)表单。