C # Сохранить сообщение электронной почты как MSG-файл - PullRequest
1 голос
/ 17 октября 2019

Следующий метод сохраняет объект типа Microsoft.Exchange.WebServices.Data.EmailMessage на диске

private void SaveMailOnDisk(Microsoft.Exchange.WebServices.Data.EmailMessage email, string pathLocation)
{
    FileStream fs = null;
    BinaryWriter sw = null;
    try
    {
        email.Load(new PropertySet(ItemSchema.MimeContent));
        MimeContent mc = email.MimeContent;
        fs = new FileStream(pathLocation, FileMode.Create);
        // mc.CharacterSet Is UTF8
        sw = new BinaryWriter(fs, System.Text.Encoding.UTF8);
        sw.Write(mc.Content, 0, mc.Content.Length);
        sw.Flush();
    }
    catch { }
    finally
    {
        sw?.Close();
        fs?.Close();
    }
}

Файл успешно сохраняется на диске, но когда я пытаюсь открыть его с помощью Outlook 2016, я получаю следующую ошибку:

Мы не можем открыть путь к msg-файлу. Возможно, файл уже открыт или у вас нет прав для его открытия

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

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Имейте в виду, что формат MIME не является родным для Exchange, и вы можете потерять специфичные для MAP свойства, если преобразуете элемент Exchange в формат MIME (EML).

При этом Outlook будетсчастлив открыть файл EML так же легко, как файл MSG, так что вы ничего не получите, преобразовав EML в MSG.

Если вы хотите сохранить все специфичные для MAP свойства, вам необходимо выполнить экспорт, используяФормат Fast Transfer Stream (FTS) - это формат, создаваемый операцией ExportItems EWS (см. https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/exportitems-operation и https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-export-items-by-using-ews-in-exchange)

Формат FTS сохраняет все свойства MAPI, но его внутренняя структуране задокументировано. Если вы хотите преобразовать данные FTS в файл MSG, вы можете сделать это, используя Redemption (я его автор) - создайте экземпляр объекта RDOSession , позвоните RDOSession.CreateMessageFromMsgFile, чтобы создать новый файл MSG, позвоните RDOMail.Import(..., olFts), чтобы импортировать данные FTS, затем наберите RDOMail.Save.

0 голосов
/ 17 октября 2019

Нет встроенной поддержки .msg файлов, использующих EWS . Это строго Outlook формат.

Эта сторонняя библиотека может удовлетворить ваши требования, однако.

Что касается сообщения об ошибке, которое вы получаете, я бысоветуем попробовать обновить Outlook 2016 до последнего обновления .

...