我正在创建一个工具(Windows应用程序)来接收邮件通知,一旦收到收到新邮件的通知,我就可以选择阅读此邮件或忽略它。
我能够获得流通知,但它只是说现在收到了一封新邮件我的要求是显示一条消息,说明已收到“X人(发件人)”的新邮件,并且使用可以选择他/她想读或忽略它。
现在收到通知后我点击了电子邮件服务器并获取了所有未读邮件,然后从该列表中获取了最后一封未读邮件,但这是不正确的方法,假设同时收到2-3封邮件,那么它会混淆电子邮件必须提取。
以下是我用于流通知的代码
void SetStreamingNotifications(ExchangeService service)
{
StreamingSubscription streamingsubscription = service.SubscribeToStreamingNotifications(
new FolderId[] { WellKnownFolderName.Inbox },
EventType.NewMail,
EventType.Created,
EventType.Deleted);
StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 1);
connection.AddSubscription(streamingsubscription);
// Delegate event handlers.
connection.OnNotificationEvent +=
new StreamingSubscriptionConnection.NotificationEventDelegate(OnEvent);
connection.OnSubscriptionError +=
new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnError);
connection.OnDisconnect +=
new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnDisconnect);
connection.Open();
}
现在我的问题是,当我通过“StreamingSubscription”收到通知已收到新邮件时,如何获得新收到的电子邮件的ItemId。
答案 0 :(得分:1)
ItemId在ItemEvent类中返回(作为SOAP通知的一部分),例如
switch (notification.EventType)
{
case EventType.NewMail:
Console.WriteLine("\n————-Mail created:————-");
break;
case EventType.Created:
Console.WriteLine("\n————-Item or folder created:————-");
break;
case EventType.Deleted:
Console.WriteLine("\n————-Item or folder deleted:————-");
break;
}
// Display the notification identifier.
if (notification is ItemEvent)
{
// The NotificationEvent for an e-mail message is an ItemEvent.
ItemEvent itemEvent = (ItemEvent)notification;
Console.WriteLine("\nItemId: " + itemEvent.ItemId.UniqueId);
}
有很多优秀的样本使用https://ewsstreaming.codeplex.com/