Плагин Office 2010 Outlook не сохраняет только вложения

Я унаследовал плагин Office 2010 для Outlook. Предполагается, что он сможет сохранять письма, вложения или и то, и другое в отдельной базе данных / файле. Он сохраняет письма с вложениями просто красиво (также как и то и другое). Если я выберу только сохранение вложений, он все равно сохранит оба (почта + вложения), то есть - хороший файл msg с вложениями (msg - это формат файла почты Outlook). Существует также версия Office 2003/2007, которая может делать это правильно, сохраняя почту, вложения или оба ожидающих по выбору. Я просматривал код уже пару дней и не смог найти разницы между тем, на что способен 2003/7, и на что не способен 2010 год.

Может ли быть, что Outlook 2010 не может сохранять почту и вложения по отдельности с точки зрения кода?

Подробности:
Плагин Office 2003: Написан на C #, .NET3.5, VS8
Плагин Office 2007: C #, .NET3.5, VS8
Плагин Office 2010: C #, .NET4, VS10

Мы официально удалили версию 2003 года и больше не поддерживаем ее. 2007 исправляется, когда кто-то что-то сообщает. 2010 год это "новый" черный;)

Возможно, я нашел ключевой момент

protected override void EnableAddAttachmentsToLegis()
{  
    // Adds a button on the right click context menu, 
    // when user clicks on an attachment:
    _application.AttachmentContextMenuDisplay
        += new Outlook.ApplicationEvents_11_AttachmentContextMenuDisplayEventHandler
        (Application_AttachmentContextMenuDisplay);  
}

http://technet.microsoft.com/en-us/query/bb623145 - облом, хороший вопрос сейчас - а что заменило, или полностью отменили.

На смену ему пришел 2007 год - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_event_members.aspx, который в 2010 г. устарел.


person DoStuffZ    schedule 06.10.2011    source источник


Ответы (1)


Я делал что-то подобное несколько раз назад, когда использовал Outlook. Я собираюсь обрисовать свои шаги:

Подписан на новое почтовое событие:

Application.NewMailEx += Application_NewMailEx;

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

string[] entryIds = EntryIDCollection.Split ( new char[] { ',' } );
foreach (string entryId in entryIds) {
    processMail ( entryId, maskExpanded );
}

Функция processMail извлекает почтовый элемент и перебирает все вложения, если есть вложения:

private void processMail( string entryId ) {
    Outlook.MailItem mail = Application.Session.GetItemFromID ( entryId ) as Outlook.MailItem;
    if (mail.Attachments.Count > 0) {
        foreach (Outlook.Attachment att in mail.Attachments)
            processAttachment ( att );
    }
}

Ядро функции processAttachment только что сохранило вложение, используя

attachment.SaveAsFile ( <filename> );

Функции в моем дополнении делают немного больше (например, создают структуру каталогов), но основная идея должна была стать очевидной. Выполнение этого для почтовых элементов за пределами события создания почты, вероятно, следует тем же шагам.

person Sascha    schedule 07.10.2011
comment
Забавно, я на самом деле писал то же самое, когда обновлял эту страницу. Моя разница в том, что я не делаю этого для всех новых писем, а только для тех, которые пользователь нажимает (щелкните правой кнопкой мыши). Вы подтверждаете, что 2010 может сохранять вложения отдельно от почты с точки зрения программирования. - person DoStuffZ; 07.10.2011