Создайте файл .eml без предварительного сохранения EmailMessage в почтовый ящик

Моя цель — взять параметры сообщения (от, кому, тело, тема и т. д.) и создать файл .eml.

В настоящее время я использую управляемый API EWS (хотя я открыт для других предложений) для создания объекта EmailMessage. Вместо того, чтобы сохранять сообщение в почтовый ящик или отправлять его (это невозможно, поскольку учетная запись приложения, которую я использую, не имеет доступа к каким-либо почтовым ящикам из-за политик безопасности), я хочу создать файл .eml.

Я адаптировал некоторый код, который нашел из другого ответа, который выглядел многообещающе:

EmailMessage message = new EmailMessage(service);

//message initialization code
//...

using (FileStream fs = File.Open(@"message.eml", FileMode.Create, FileAccess.Write))  
{
    message.Load(new PropertySet(ItemSchema.MimeContent));
    var mc = message.MimeContent;
    fs.Write(mc.Content, 0, mc.Content.Length);
}

Но я получаю исключение в message.Load(), говорящее: «Эта операция не может быть выполнена, потому что у этого объекта службы нет идентификатора». Через небольшую отладку я в основном вижу, что message.Id равен нулю. У id нет сеттера. Я считаю, что это связано с тем, что сообщение не получает идентификатор, пока оно не будет сохранено в папке, чего я не могу сделать.

Есть ли способ обойти это?

Спасибо


person thogue    schedule 13.03.2014    source источник


Ответы (1)


Класс EmailMessage не имеет анализатора/записи MIME. MimeContent создается сервером. Обходной путь — создать собственный синтаксический анализатор для анализа свойств, установленных в объекте EmailMessage. Зачем использовать класс EmailMessage, если вы не сохраняете на сервер?

person Michael Mainer    schedule 14.03.2014
comment
Я использовал класс EmailMessage, так как думал, что у него есть метод для создания MimeContent и сохранения в файл eml (метод Load). Есть ли способ использовать любую логику, генерирующую MimeContent сервером, без сохранения на нем? Если нет, существуют ли рекомендации/документация о том, как правильно форматировать файл eml? (Мое понимание было не обязательно) Спасибо - person thogue; 18.03.2014
comment
Насколько я понимаю, формат .eml основан на RFC822 (rfc-editor.org/rfc/ rfc822.txt) или один из последующих RFC. Вы можете попытаться посмотреть, не сделал ли кто-нибудь парсер EmailMessage to .eml, или вы можете проверить файл .eml (это обычный текст), чтобы вы могли создать свой собственный синтаксический анализ. - person Michael Mainer; 07.04.2014