ขณะนี้ฉันกำลังย้ายการเพิ่ม VSTO ที่เขียนใน VB ไปยัง C# สำหรับ Outlook
แนวคิดทั่วไปคือบันทึกข้อมูลอีเมลทุกรายการลงในฐานข้อมูลของฉันเอง ฉันได้ค้นหาอย่างละเอียดแล้วและดูเหมือนว่าเหตุการณ์ NewMail / NewMailEX (จากออบเจ็กต์แอปพลิเคชัน) เป็นตัวเลือกที่ดีที่สุดในการจัดการ
อย่างไรก็ตาม เหตุการณ์ทั้งสองจะไม่ทริกเกอร์สำหรับอีเมลที่ได้รับเมื่อไคลเอนต์ Outlook หยุดทำงาน ฉันประสบปัญหาขณะพยายามประมวลผลเมลทั้งหมดที่ดาวน์โหลดเมื่อเริ่มต้นระบบจากเซิร์ฟเวอร์ Exchange ดังนั้นฉันจึงคิดว่าเหตุการณ์ "เพิ่มรายการ" จากการรวบรวมรายการอาจแก้ไขปัญหานี้ได้
ฉันรู้ความจริงว่าสิ่งนี้สามารถแก้ไขได้ภายในเหตุการณ์ "เพิ่มรายการ" เนื่องจากเรากำลังจัดการกับปัญหานี้ในโค้ด VB
อย่างไรก็ตาม เมื่อลองสมัครรับเหตุการณ์ "เพิ่มรายการ" สำหรับแต่ละโฟลเดอร์กล่องจดหมายเข้าใน Outlook ก็ไม่มีอะไรเกิดขึ้น! ไม่มีข้อผิดพลาดหรือข้อยกเว้นใดๆเกิดขึ้น
ในโค้ด VB ของเรา เราสามารถสมัครเข้าร่วมกิจกรรมดังกล่าวได้ด้วยโค้ดนี้:
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
นี่คือรหัส C# ที่ล้มเหลวของฉัน:
//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);
}
}
}