【发布时间】:2016-04-22 18:21:41
【问题描述】:
我有一个任务,我需要检查发送到我邮箱的电子邮件并阅读它们,根据主题我必须做一些任务。但出于演示目的,我只提供了更新电子邮件阅读状态的基本功能
基本连接和创建服务对象一切正常:
///////////
NetworkCredential credentials = new NetworkCredential(securelyStoredEmail, securelyStoredPassword);
ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
_service.Credentials = credentials;
_service.AutodiscoverUrl("User1@contoso.com");
////////////////////// 在这里一切正常。但是,我将使用响应式 linq 的可观察事件每 60 秒调用一次以下方法。这是去轮询我的邮箱,每 60 秒阅读 100 封电子邮件。 一切正常,直到某个时候。有时,当控件到达 parallel.foreach 循环内的代码行时,它会显示错误消息,例如“服务器现在无法处理此请求。请稍后再试'这样的事情。这个错误恰好出现在
var email = EmailMessage.Bind(_service, findItemsResult.Id, emailProps);
所以每隔 60 秒,我有时会收到此错误。有时它可以正常工作。 以下是每 60 秒执行一次的方法。就像我每 60 年代尝试从“myaccount.com”读取电子邮件一样,我会收到错误“服务器无法处理”。
internal void GetEmailsFrommymailbox()
{
try
{
var view = new ItemView(100);
var userMailbox = new Mailbox(userMailbox);
var folderId = new FolderId(WellKnownFolderName.Inbox, userMailbox);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And,
new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
var findResults = _service.FindItems(folderId, sf, view);
var emailProps = new PropertySet(ItemSchema.MimeContent, ItemSchema.Body,
ItemSchema.InternetMessageHeaders);
Parallel.ForEach(findResults, findItemsResult =>
{
///////////// this is the line where i get error////////
var email = EmailMessage.Bind(_service, findItemsResult.Id, emailProps);
//// above is the place where i get error
var emailMatching = email;
try
{
email.IsRead = true;
email.Update(ConflictResolutionMode.AutoResolve);
}
catch (Exception emailreadFromBccException)
{
Logger.Warn(emailreadFromBccException + " Unable to update email read status");
}
});
}
}
【问题讨论】:
标签: linq c#-4.0 exchangewebservices