2012-06-07 43 views
7

在我的Outlook插件中我想在功能區上添加一個按鈕,因此當用戶單擊此按鈕時我想檢索當前選定的電子郵件的正文,但是它只檢索第一封電子郵件收件箱,因爲索引是1:在Outlook中檢索當前電子郵件正文

Microsoft.Office.Interop.Outlook.Application myApp = new Microsoft.Office.Interop.Outlook.Application(); 
Microsoft.Office.Interop.Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); 
Microsoft.Office.Interop.Outlook.MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
String body = ((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[1]).Body; 

那麼如何檢索Outlook中當前打開的電子郵件? ,這種方法適用於我,但我需要獲取當前電子郵件的索引。

謝謝。

回答

7

您不應該每次都初始化一個新的Outlook.Application()實例。大多數插件框架通常通過名爲Application的字段或屬性爲您提供與當前Outlook會話對應的Outlook.Application實例。您需要在加載項的整個生命週期中使用它。

要獲得當前選擇的項目,用途:

Outlook.Explorer explorer = this.Application.ActiveExplorer(); 
Outlook.Selection selection = explorer.Selection; 

if (selection.Count > 0) // Check that selection is not empty. 
{ 
    object selectedItem = selection[1]; // Index is one-based. 
    Outlook.MailItem mailItem = selectedItem as Outlook.MailItem; 

    if (mailItem != null) // Check that selected item is a message. 
    { 
     // Process mail item here. 
    } 
} 

注意上面會讓你處理第一選擇的項目。如果您選擇了多個項目,則可能需要循環處理它們。

+0

感謝您的幫助,但第2行存在錯誤:不可使用的成員'Microsoft.Office.Interop.Outlook._Explorer.Selection'不能像方法一樣使用 – Radi

+1

道歉;我忘了「選擇」是一種財產,而不是一種方法。再次修改代碼。 – Douglas

+0

檢查所選項目是否爲郵件項目可以添加以及用戶可能已選擇聯繫人,約會或其他內容。 只是我2美分。 –

6

在最前面添加參考

using Outlook = Microsoft.Office.Interop.Outlook; 

然後,方法內;

Outlook._Application oApp = new Outlook.Application(); 
if (oApp.ActiveExplorer().Selection.Count > 0) 
      { 
       Object selObject = oApp.ActiveExplorer().Selection[1]; 

       if (selObject is Outlook.MailItem) 
       { 
        Outlook.MailItem mailItem = (selObject as Outlook.MailItem); 
        String htmlBody = mailItem.HTMLBody; 
        String Body = mailItem.Body; 
       } 
      } 

您也可以在查看郵件之前更改在Outlook中顯示的正文。

相關問題