[英]Outlook Add-in Exception - How to check the type of Outlook.Item?
我有一個Outlook 2013 插件<\/strong>,
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);
}
您可以在C#中使用“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);
}
它會像你期望的那樣工作。
實際上,至少有 16 種 Outlook 項目類型。 逐條列出不同類型的文檔有點難找,但這里有一個參考資料。
因此,例如,如果您想將所有項目從一個文件夾移動到另一個文件夾,您可以執行以下操作:
Items items = source.Items;
foreach (object item in items)
{
switch (item)
{
case AppointmentItem appointmentItem:
appointmentItem.Move(destination);
break;
case ContactItem contactItem:
contactItem.Move(destination);
break;
case DistListItem distListItem:
distListItem.Move(destination);
break;
case DocumentItem documentItem:
documentItem.Move(destination);
break;
case JournalItem journalItem:
journalItem.Move(destination);
break;
case MailItem mailItem:
mailItem.Move(destination);
break;
case MeetingItem meetingItem:
meetingItem.Move(destination);
break;
case NoteItem noteItem:
noteItem.Move(destination);
break;
case PostItem postItem:
postItem.Move(destination);
break;
case RemoteItem remoteItem:
remoteItem.Move(destination);
break;
case ReportItem reportItem:
reportItem.Move(destination);
break;
case TaskItem taskItem:
taskItem.Move(destination);
break;
case TaskRequestAcceptItem taskRequestAcceptItem:
taskRequestAcceptItem.Move(destination);
break;
case TaskRequestDeclineItem taskRequestDeclineItem:
taskRequestDeclineItem.Move(destination);
break;
case TaskRequestItem taskRequestItem:
taskRequestItem.Move(destination);
break;
case TaskRequestUpdateItem taskRequestUpdateItem:
taskRequestUpdateItem.Move(destination);
break;
}
Marshal.ReleaseComObject(item);
}
case 語句中的類型匹配需要 C# 7 或更高版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.