Saat ini saya sedang memigrasikan tambahan VSTO yang ditulis dalam VB ke C# untuk Outlook.
Ide umumnya adalah mencatat setiap informasi email ke dalam database saya sendiri. Saya telah mencari secara menyeluruh dan tampaknya peristiwa NewMail/NewMailEX (dari objek aplikasi) adalah pilihan terbaik untuk menanganinya.
Namun, kedua peristiwa tersebut tidak akan memicu email yang diterima saat klien Outlook tidak aktif. Saya mengalami masalah saat mencoba memproses semua email yang diunduh saat startup dari server pertukaran, jadi menurut saya acara "Penambahan item" dari koleksi item, mungkin mengatasi masalah ini.
Saya tahu pasti bahwa ini dapat diatasi dalam acara "penambahan item" karena kami sebenarnya menangani masalah ini dalam kode VB.
Namun, ketika mencoba berlangganan acara "tambahan item" untuk setiap folder Kotak Masuk di Outlook, tidak terjadi apa-apa! Tidak ada kesalahan atau pengecualian apa pun.
dalam kode VB kami, kami dapat mengikuti acara yang disebutkan dengan kode ini:
outlookNameSpace = Me.Application.GetNamespace("MAPI")
inbox = outlookNameSpace.Stores(account).GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
Mailitem = inbox.Items
Private Sub Items_ItemAdd(ByVal item As Object) Handles Mailitem.ItemAdd
Ini kode C# saya yang gagal:
//looping to fetch all my inboxes
public static void InitialOutlookConfiguration(Outlook.Application myOutlookInstance)
{
Outlook.Accounts myAccounts = myOutlookInstance.GetNamespace("MAPI").Accounts;
foreach(Outlook.Account myAccount in myAccounts)
{
Outlook.MAPIFolder inbox = myAccount.DeliveryStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
string storeID = myAccount.DeliveryStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).StoreID;
myInboxes.Add(inbox, storeID);
foreach(Outlook.MAPIFolder inbox in myInboxes.Keys)
{
Outlook.Items myInboxItems = inbox.Items;
myInboxItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(OnNewItem);
}
}
}