Плагин Office 2010 Outlook не сохраняет только вложения - PullRequest
0 голосов
/ 06 октября 2011

Я унаследовал плагин 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 году.

1 Ответ

0 голосов
/ 07 октября 2011

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

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

Application.NewMailEx += Application_NewMailEx;

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

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

Функция processMail извлекает mailitem и выполняет итерацию всех вложений, если есть вложения:

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

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

...