Получить тело входящего письма в Outlook Addin

Я хочу обрабатывать входящие письма, поступающие с сервера обмена, и сохранять их в своем почтовом ящике. На данный момент я могу получить оповещение для каждой входящей почты.

Как я могу получить тело письма для его обработки?

public partial class ThisAddIn
 {
 private void ThisAddIn_Startup(object sender, System.EventArgs e)
 {
 this.Application.NewMail += new ApplicationEvents_11_NewMailEventHandler(AlertWhenNewMail);
 }
 void AlertWhenNewMail()
 {
 MessageBox.Show("New Email Recieved");
 }
 private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
 {
 }
 #region VSTO generated code
 private void InternalStartup()
 {
 this.Startup += new System.EventHandler(ThisAddIn_Startup);
 this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
 }
 #endregion
 }

Также, как сохранить электронную почту, а затем просто сохранить ее в папке "Входящие"?

3 ответа

Чтобы перейти к фактическому элементу mailItem, используйте идентификатор entry, переданный в событии newMailEx. Ваш ответ на другие сообщения подсказывает, что это не работает для вас каким-то образом, но я предполагаю, что мы разобрались с этим и предоставим вам примерный код:

void MyApplication_NewMailEx(string anEntryID)
{
 Outlook.NameSpace namespace = this.GetNamespace("MAPI"); 
 Outlook.MAPIFolder folder = this.Session.GetDefaultFolder( Outlook.OlDefaultFolders.olFolderInbox );
 Outlook.MailItem mailItem = (Outlook.MailItem) outlookNS.GetItemFromID( anEntryID, folder.StoreID );
 // ... process the mail item
}

Чтобы ответить на вторую часть вашего вопроса, как только вы получите почту через это событие, она уже была сохранена в вашем почтовом ящике, поэтому ничего там не нужно. Вы сохранили его на диске с помощью MailItem.SaveAs.


Вместо события Application.NewMail попробуйте Application.NewMailEx с параметром EntryIDCollection (Строка, представляющая идентификатор записи элемент, полученный в папке "Входящие" ), с помощью которого вы сможете получить новое электронное письмо. На странице MSDN есть простой пример.


Здесь у вас есть ответ для Outlook 2010. Одна строка кода в событии NewMailEx:

void Application_NewMailEx(string EntryIDCollection)
 { 
 Outlook.MailItem newMail = (Outlook.MailItem) Application.Session.GetItemFromID(EntryIDCollection, System.Reflection.Missing.Value);
 // do whatever you want with the new email...
 }

licensed under cc by-sa 3.0 with attribution.