У меня есть надстройка Outlook 2013,
Outlook.MAPIFolder inboxFolder;
Outlook.Items mailInboxItems;
private void ThisAddIn_Startup(object sender, EventArgs e)
{
... other code ---
mailInboxItems = inboxFolder.Items;
mailInboxItems.ItemAdd += mailInboxItems_ItemAdd;
}
private void mailInboxItems_ItemAdd(object item)
{
Outlook.MailItem emailMessage = (Outlook.MailItem)item; // cast error
ProcessEmail(emailMessage);
}
Исключение возникает, когда, конечно, элемент, входящий в него, не имеет типа Outlook.MailItem:
Невозможно передать COM-объект типа "System.__ ComObject" в тип интерфейса "Microsoft.Office.Interop.Outlook.MailItem".
Как я могу проверить, что параметр "item" имеет только допустимый тип, т.е. Outlook.MailItem, чтобы избежать каких-либо исключений?
Вы можете использовать операторы "is" и "as" в С#. См. " Как: программно определить текущий элемент Outlook" для получения дополнительной информации.
Также объектная модель Outlook предоставляет свойство MessageClass - строку, представляющую класс сообщения для элемента Outlook. Под капотом класс сообщения используется для определения того, какой инспектор должен использовать в Outlook для разметки элемента.
В вашу папку вы можете добавлять различные элементы, такие как MailItem
, AppointmentItem
и т.д. Для работы с MailItems
используйте следующий код:
var emailMessage = item as MailItem;
if(emailMessage == null)
{
retrun;
}
// here you can use emailMessage as MailItem
ProcessEmail(emailMessage);
Первый элемент проверки - mailitem
if(item is Outlook.MailItem){
Outlook.MailItem emailMessage =item as Outlook.MailItem
ProcessEmail(emailMessage);
}
он будет работать как ваше ожидание.