Получить Текущие Теле Письма В Outlook

в моем outlook addin я хочу добавить кнопку на ленте, поэтому, когда пользователь нажимает эту кнопку, Я хочу получить тело текущего выбранного письма , у меня есть этот код, но он получает только первое письмо из папки "Входящие", потому что индекс равен 1 :

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? , этот метод работает для меня, но мне нужно получить индекс для текущего письма.

спасибо.

2 ответов


вы не должны инициализировать новый 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.
    }
}

обратите внимание, что выше позволит вам обработать первый выбранный элемент. Если выбрано несколько элементов, возможно, вы захотите обработать их в цикле.


сверху добавить ссылку на

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 перед просмотром почты.