我有一个 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类型时抛出异常:
无法将“System .__ ComObject”类型的COM对象强制转换为接口 输入'Microsoft.Office.Interop.Outlook.MailItem'。
如何检查参数“item”是否只是有效类型,即Outlook.MailItem以避免任何异常?
答案 0 :(得分:2)
您可以在C#中使用“is”和“as”运算符。有关详细信息,请参阅How to: Programmatically Determine the Current Outlook Item。
Outlook对象模型还提供MessageClass属性 - 表示Outlook项的邮件类的字符串。在引擎盖下,消息类用于标识在Outlook中使用哪个检查器来绘制项目。
答案 1 :(得分:1)
您可以在文件夹中添加不同类型的项目,例如MailItem
,AppointmentItem
等。要使用MailItems
,请使用以下代码:
var emailMessage = item as MailItem;
if(emailMessage == null)
{
retrun;
}
// here you can use emailMessage as MailItem
ProcessEmail(emailMessage);
答案 2 :(得分:0)
首先检查项目是mailitem,如
if(item is Outlook.MailItem){
Outlook.MailItem emailMessage =item as Outlook.MailItem
ProcessEmail(emailMessage);
}
它将按您的期望工作。