簡體   English   中英

"Outlook 加載項異常 - 如何檢查 Outlook.Item 的類型?"

[英]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中使用哪個檢查器來繪制項目。

在您的文件夾中,您可以添加不同類型的項目,如MailItemAppointmentItem等。 要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM