Изпратено или получено събитие за имейл за добавка Oulook

Изискване: Създадох добавка за Outlook за извикване на уеб услуга с имейл входен идентификатор и друга информация. Уеб услугата при получаване на обаждането ще отиде до сървъра на Exchange и ще потърси този пощенски елемент. При намиране на пощенския елемент уеб услугата ще съхрани прикачените файлове и други свързани с имейл полета в нашата персонализирана база данни.

Решение: Добавката на Outlook има събитие ItemAdd, което получава обекта MailItem. След това асоциира потребителски GUID към обекта на пощенския елемент и го записва. След това извиква уеб услугата с тези параметри и идентификатора на папката.

Проблем: Когато уеб услугата отиде до сървъра за обмен, имейлът не е намерен, тъй като имейлът все още се изпраща. Проблемът тук е с времето, което може да зависи от различни фактори като размер на имейла, размер на прикачените файлове, скорост на интернет и т.н. Така че има ли някакво събитие в Outlook, което може да се задейства, когато имейлът действително е „ИЗПРАТЕНО“, така че добавката in след това ще извика уеб услугата.


person Naupad Doshi    schedule 11.10.2017    source източник
comment
Вярвам, че бихте могли да го направите с обработка в 2 стъпки: на ItemAdd манипулатор, добавете втори манипулатор към MailItem.Send събитие и поставете извикването си към уеб услугата в последното.   -  person VBobCat    schedule 11.10.2017


Отговори (1)


Това може да се очаква - когато Outlook изпрати съобщение, той го качва на сървъра на Exchange и го премества в (локалната) папка "Изпратени елементи", което предизвиква задействане на събитието Items.ItemAdd. Не е гарантирано обаче, че съобщението ще бъде в сървърната (онлайн) версия на папката Изпратени - това ще се случи (много) по-късно, когато сървърът го изпрати. Това обикновено отнема няколко секунди.

Или въведете забавяне при изпращане на идентификатора за въвеждане на съобщението към вашия уеб сървър, или обработете събитието ItemAdd в онлайн версията на папката Изпратени. Можете да направите това с помощта на Extended MAPI (C++ или Delphi), като отворите папката в онлайн режим (IMsgStore::OpenEntry(..., MAPI_NO_CACHE), след което обработете събитията на IMAPITable от таблицата със съдържанието на папката, върната от IMAPIFolder::GetContentsTable) или използвайте Redemption, за да отворите отново папката в онлайн режим - обадете се на RDOSession.GetFolderFromID(..., MAPI_NO_CACHE).

person Dmitry Streblechenko    schedule 11.10.2017