Ive được xem xét điều này gần đây hơn và có các thông tin sau:
Tôi đang chạy một ứng dụng Console này sẽ thiết lập một kết nối trực tuyến để kiểm tra email mới đến trong hộp thư cho [email protected]
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
WebCredentials wbcred = new WebCredentials("userone", "password", "mydomain");
service.Credentials = wbcred;
Console.WriteLine("Attempting to autodiscover Url...");
service.AutodiscoverUrl("[email protected]", RedirectionUrlValidationCallback);
EWSConnection.SetStreamingNotifications(service);
Console.ReadKey();
Environment.Exit(0);
}
EWSConnection
lớp tĩnh của tôi trông lỏng lẻo như thế này:
public static void SetStreamingNotifications(ExchangeService service)
{
_service = service;
try
{ var subscription = service.SubscribeToStreamingNotifications(
new FolderId[] { WellKnownFolderName.Inbox },
EventType.NewMail);
StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 5);
connection.AddSubscription(subscription);
connection.OnNotificationEvent += new StreamingSubscriptionConnection.NotificationEventDelegate(OnEvent);
connection.Open();
_subscription = subscription;
_subscriptionConnection = connection;
Console.WriteLine($"Connection Open:{connection.IsOpen}");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Với điều này, bạn có thể thấy tôi đã đăng ký OnNotificationEvent
và lần lượt phương pháp OnEvent
của chúng tôi sẽ được gọi khi một email mới đến. Khi một email mới đến hộp thư này, tôi có một yêu cầu để tạo một nhiệm vụ và gán nó cho người có liên quan, dựa trên những gì thuộc tính ToAddress
.
private static void CreateTask(NotificationEvent notification, RecievedMail recievedMail)
{
try
{
Console.WriteLine("Attempting to create task");
Microsoft.Exchange.WebServices.Data.Task task = new Microsoft.Exchange.WebServices.Data.Task(_service);
task.DueDate = DateTime.Now.AddDays(7);
task.Body = recievedMail.Body;
task.Subject = recievedMail.Subject;
string targetSharedEmailAddress = null;
if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:[email protected]>")
{
targetSharedEmailAddress = "[email protected]";
}
task.Save(new FolderId(WellKnownFolderName.Tasks,targetSharedEmailAddress)); //
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Lúc đầu bạn có thể thấy rằng tôi đã cố gắng thêm người mà tôi muốn công việc được tạo ra cho trong phương pháp task.Save
, tuy nhiên một khi tôi đã đi vào Outlook để tương tác với nhiệm vụ mới được tạo ra, chủ sở hữu vẫn còn userone
, tức là người có thông tin đăng nhập được sử dụng để kết nối với dịch vụ, đây là vấn đề đối với tôi khi tôi cần chủ sở hữu nhiệm vụ là usertwo
.
Điều này được thực hiện bằng cách xóa biến số targetSharedEmailAddress
và thay vào đó sử dụng thuộc tính ImpersonatedUserId
của đối tượng ExchangeServer
.
if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:[email protected]>")
{
_service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]");
}
https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx
Cám ơn nhìn vào điều này đối với tôi - nó rất nhiều đánh giá cao! Tôi háo hức chờ đợi phản hồi của bạn ... –