Получить текущее тело электронной почты в Outlook

в моей надстройке Outlook я хочу добавить кнопку на ленту, поэтому, когда пользователь нажимает эту кнопку, я хочу получить тело текущего выбранного электронного письма, у меня есть этот код, но он извлекает только первое электронное письмо из папки «Входящие», потому что индекс равен 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? , этот метод работает для меня, но мне нужно получить индекс для текущего электронного письма.

Спасибо.


person Radi    schedule 07.06.2012    source источник


Ответы (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.
    }
}

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

person Douglas    schedule 07.06.2012
comment
спасибо за помощь, но в строке 2 есть ошибка: не вызываемый член «Microsoft.Office.Interop.Outlook._Explorer.Selection» не может использоваться как метод - person Radi; 07.06.2012
comment
Извинения; Я забыл, что Selection — это свойство, а не метод. Попробуйте еще раз с исправленным кодом. - person Douglas; 07.06.2012
comment
Можно добавить проверку, являются ли выбранные элементы почтовыми отправлениями, а также пользователь может выбрать контакт, встречу или что-то еще. Просто мои 2 цента. - person Pavel Donchev; 18.06.2012
comment
@PavelDonchev: Проверка уже выполняется. Если приведение as MailItem не удается, то mailItem будет содержать null. - person Douglas; 18.06.2012

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

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

person MoraRockey    schedule 11.06.2012