2012-06-07 4 views
7

в моем прогнозе addin Я хочу добавить кнопку на ленте, поэтому, когда пользователь нажимает эту кнопку, я хочу получить тело текущего выбранного электронного письма, у меня есть этот код, но он извлекает только первое электронное письмо из почтовый ящик, потому что индекс равен 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() каждый раз. Большинство инфраструктур надстройки предоставляют вам экземпляр Outlook.Application, соответствующий текущему сеансу 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

On Top добавить ссылку на

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; 
       } 
      } 

Также вы можете изменить тело, которое будет отображаться в перспективе перед просмотром почты.

Смежные вопросы