Надстройка Outlook 2010 C ++ - извлечение тела письма из HTML - PullRequest
1 голос
/ 17 декабря 2011

Я пишу надстройку для Outlook 2010, моя надстройка добавляет нижний колонтитул к электронным письмам в соответствии с каждым форматом электронной почты (простой текст / HTML), теперь я только что обнаружил проблему, которая возникает, когда я включаю Outlook: «Читать «электронные письма в виде простого текста» (http://support.microsoft.com/kb/831607),, что происходит, если моя надстройка получает электронные письма в формате HTML в виде простого текста, поэтому добавляет нижний колонтитул и сохраняет их соответствующим образом, что является проблемой, поскольку после сохранения в виде простого текста фактический HTML версия письма полностью утеряна из внешнего вида.

Вот мой код (отредактировано для краткости):

void CConnect::OnNewItem(IDispatch* item)
{
    if (item)
    {
        CComQIPtr<Outlook::_MailItem> mailItem(item);

        OlBodyFormat bodyFormat;
        mailItem->get_BodyFormat(&bodyFormat);

        CComBSTR body;
        if(bodyFormat == olFormatPlain)
            mailItem->get_Body(&body);
        if(bodyFormat == olFormatHTML)
            mailItem->get_HTMLBody(&body);

        //append the footer here

        if(bodyFormat == olFormatPlain)
            mailItem->put_Body(newBody);
        if(bodyFormat == olFormatHTML)
            mailItem->put_HTMLBody(newBody);

        mailItem->Save();
        mailItem->Release();
    }
}

Я также пытался получить текст электронных писем в формате HTML независимо от их формата, но я получил сгенерированную версию HTML в виде обычного текста, поэтому весь исходный CSS и форматирование потеряны.

Мне нужен способ извлечения исходной HTML-версии, когда включена функция Outlook «Читать электронные письма в виде простого текста». Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 02 ноября 2012

Немного устаревший, но только что увидел это сейчас ...

Возможно, вам придется перейти на уровень MAPI, чтобы сделать это правильно.Примерно так:

LPMESSAGE MapiMessage;
HRESULT ResultCode  = HrGetOneProp(MapiMessage, PR_HTML, &PropertiesValues);
LPSBinary HtmlBodyProperty = (LPSBinary)&PropertiesValues->Value.bin;

Интеграция поддержки MAPI в ваш аддин не так болезненна, как думают некоторые.Хорошей отправной точкой является « Использование MAPI для создания элементов Outlook 2007 ».

...