Загрузка и Сохранение Сообщений

Contents
[ ]

Загрузка и Сохранение Сообщений

Определение Форматов Файлов

API Aspose.Email предоставляет возможность определять формат файла данного сообщения. Метод DetectFileFormat класса FileFormatUtil можно использовать для этой цели. Для определения загруженного формата файла можно использовать следующие классы и методы.

Следующий фрагмент кода показывает, как определить форматы файлов.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
// Detect file format and Gets the detected load format
FileFormatInfo info = FileFormatUtil.DetectFileFormat(dataDir + "message.msg");
Console.WriteLine("The message format is: " + info.FileFormatType);

Загрузка Сообщения с Опциями Загрузки

Следующий фрагмент кода показывает, как загрузить сообщение с опциями загрузки.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
// Load Eml, html, mhtml, msg and dat file
MailMessage mailMessage = MailMessage.Load(dataDir + "Message.eml", new EmlLoadOptions());
MailMessage.Load(dataDir + "description.html", new HtmlLoadOptions());
MailMessage.Load(dataDir + "Message.mhtml", new MhtmlLoadOptions());
MailMessage.Load(dataDir + "Message.msg", new MsgLoadOptions());
// loading with custom options
EmlLoadOptions emlLoadOptions = new EmlLoadOptions
{
PrefferedTextEncoding = Encoding.UTF8,
PreserveTnefAttachments = true
};
MailMessage.Load(dataDir + "description.html", emlLoadOptions);
HtmlLoadOptions htmlLoadOptions = new HtmlLoadOptions
{
PrefferedTextEncoding = Encoding.UTF8,
ShouldAddPlainTextView = true,
PathToResources = dataDir
};
MailMessage.Load(dataDir + "description.html", emlLoadOptions);

Сохранение Встраиваемого Формата Сообщения во Время Загрузки

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string dataDir = RunExamples.GetDataDir_Email();
MailMessage mail = MailMessage.Load(dataDir + "tnefWithMsgInside.eml", new EmlLoadOptions() { PreserveEmbeddedMessageFormat = true });
FileFormatType fileFormat = FileFormatUtil.DetectFileFormat(mail.Attachments[0].ContentStream).FileFormatType;
Console.WriteLine("Embedded message file format: " + fileFormat);

Загрузка Сообщения с Сохранением или Удалением Подписи

Поддерживается сохранение подписи по умолчанию при загрузке файлов EML. Чтобы удалить подпись, вы можете установить свойство LoadOptions.RemoveSignature в true.

Ниже приведен пример кода, который показывает, как удалить подпись при загрузке сообщения:

var msg = MapiMessage.Load(fileName, new EmlLoadOptions() { RemoveSignature = true});

Проверка Подписи Безопасных Электронных Писем

Класс SecureEmailManager позволяет проверять подпись объектов MailMessage с безопасной электронной почтой.

Класс SmimeResult хранит результаты проверки.

Следующие методы класса SecureEmailManager и фрагмент кода позволят вам обработать подпись:

var eml = MailMessage.Load(fileName);
var result = new SecureEmailManager().CheckSignature(eml);

var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var eml = MailMessage.Load(fileName);
var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

var result = new SecureEmailManager().CheckSignature(eml, cert, store);

Сохранение и Конвертирование Сообщений

Aspose.Email облегчает конвертацию любого типа сообщения в другой формат. Для демонстрации этой функции код в этой статье загружает три типа сообщений с диска и сохраняет их обратно в других форматах. Базовый класс SaveOptions и классы EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions для дополнительных настроек при сохранении MailMessage могут быть использованы для сохранения сообщений в другие форматы. В статье показано, как использовать эти классы для сохранения примера email в:

  • Формат EML.
  • Outlook MSG.
  • Формат MHTML.
  • Формат HTML.

Загрузка и Сохранение сообщения EML

Следующий фрагмент кода показывает, как загрузить сообщение EML и сохранить его на диск в том же формате.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage mailMessage = MailMessage.Load(dataDir + "Attachments.eml");
mailMessage.Save(dataDir + "LoadAndSaveFileAsEML_out.eml", SaveOptions.DefaultEml);

Загрузка и Сохранение сообщения EML с Сохранением Оригинальных Границ

Следующий фрагмент кода показывает, как загрузить EML и сохранить как EML, сохраняя оригинальные границы.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
MailMessage mailMessage = MailMessage.Load(dataDir + "Attachments.eml");
// Save as eml with preserved original boundares
EmlSaveOptions emlSaveOptions = new EmlSaveOptions(MailMessageSaveType.EmlFormat)
{
PreserveOriginalBoundaries = true
};
mailMessage.Save(dataDir + "PreserveOriginalBoundaries_out.eml", emlSaveOptions);

Сохранение как EML с Сохранением TNEF Вложений

Следующий фрагмент кода показывает, как сохранить как EML с сохранением TNEF вложений.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
MailMessage mailMessage = MailMessage.Load(dataDir + "PreserveOriginalBoundaries.eml");
// Save as eml with preserved attachment
EmlSaveOptions emlSaveOptions = new EmlSaveOptions(MailMessageSaveType.EmlFormat)
{
FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments
};
mailMessage.Save(dataDir + "PreserveTNEFAttachment_out.eml", emlSaveOptions);

Сохранение EML как MSG

Следующий фрагмент кода показывает, как загрузить сообщение EML и конвертировать его в MSG, используя соответствующую опцию из SaveOptions.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Data directory for reading and writing files
string dataDir = RunExamples.GetDataDir_Email();
// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
// Save the Email message to disk in ASCII format and Unicode format
eml.Save(dataDir + "AnEmail_out.msg", SaveOptions.DefaultMsgUnicode);

Сохранение как MSG с Сохранением Дат

Класс MsgSaveOptions позволяет сохранять исходное сообщение как файл Outlook Message (MSG) с сохранением дат. Следующий фрагмент кода показывает, как сохранить как MSG с сохранением дат.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Data directory for reading and writing files
string dataDir = RunExamples.GetDataDir_Email();
// Initialize and Load an existing EML file by specifying the MessageFormat
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
// Save as msg with preserved dates
MsgSaveOptions msgSaveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookMessageFormatUnicode)
{
PreserveOriginalDates = true
};
eml.Save(Path.Combine(dataDir, "outTest_out.msg"), msgSaveOptions);

Сохранение MailMessage как MHTML

Разные опции MHTML могут быть использованы для получения желаемых результатов. Следующий фрагмент кода показывает, как загрузить сообщение EML в MailMessage и конвертировать его в MHTML с датой сообщения в системе UTC.

// Для полного примера и файлов данных, пожалуйста, зайдите на https://github.com/aspose-email/Aspose.Email-for-.NET

// Установка опций для вывода MHTML
MhtSaveOptions saveOptions = SaveOptions.DefaultMhtml;
saveOptions.PreserveOriginalDate = false; // сохранить дату сообщения как дату UTC

// Инициализация и загрузка существующего файла EML
using (MailMessage mailMessage = MailMessage.Load(folderPath + "Message.eml"))
{
    mailMessage.Save(folderPath + "Message_out.mhtml", saveOptions);
}

Конвертация в MHTML с Дополнительными Настройками

Класс MhtSaveOptions предоставляет дополнительные опции для сохранения электронных сообщений в формате MHTML. Перечислитель MhtFormatOptions позволяет записывать дополнительную информацию об электронной почте в выходной MHTML. Следующие дополнительные поля могут быть записаны:

  • WriteHeader – записывать заголовок электронной почты в выходной файл.
  • WriteOutlineAttachments – записывать вложения в выходной файл.
  • WriteCompleteEmailAddress – записывать полный адрес электронной почты в выходной файл.
  • NoEncodeCharacters – никакая кодировка символов не должна использоваться.
  • HideExtraPrintHeader – скрыть дополнительный заголовок печати в верхней части выходного файла.
  • WriteCompleteToEmailAddress – записывать полный адрес электронной почты получателя в выходной файл.
  • WriteCompleteFromEmailAddress – записывать полный адрес электронной почты отправителя в выходной файл.
  • WriteCompleteCcEmailAddress – записывать полные адреса электронной почты любых получателей с копией в выходной файл.
  • WriteCompleteBccEmailAddress – записывать полный адрес электронной почты любых получателей с сокрытой копией в выходной файл.
  • RenderCalendarEvent – записывать текст из события календаря в выходной файл.
  • SkipByteOrderMarkInBody – записывать байты отметки порядка байтов (BOM) в выходной файл.
  • RenderVCardInfo – записывать текст из альтернативного представления VCard в выходной файл.
  • DisplayAsOutlook – отображать заголовок From.
  • RenderTaskFields – записывает конкретные поля задачи в выходной файл.
  • None – Нет заданных настроек.

Следующий фрагмент кода показывает, как конвертировать файлы EML в MHTML с дополнительными настройками.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MailMessage eml = MailMessage.Load(Path.Combine(dataDir, "Message.eml"));
// Save as mht with header
MhtSaveOptions mhtSaveOptions = new MhtSaveOptions
{
//Specify formatting options required
//Here we are specifying to write header informations to outpu without writing extra print header
//and the output headers should display as the original headers in message
MhtFormatOptions = MhtFormatOptions.WriteHeader | MhtFormatOptions.HideExtraPrintHeader | MhtFormatOptions.DisplayAsOutlook,
// Check the body encoding for validity.
CheckBodyContentEncoding = true
};
eml.Save(Path.Combine(dataDir, "outMessage_out.mht"), mhtSaveOptions);

Отображение Календарных Событий при Конвертации в MHTML

Опция MhtFormatOptions.RenderCalendarEvent отображает события календаря в выходном MTHML. Следующий фрагмент кода показывает, как отобразить календарные события при конвертации в MHTML.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
string fileName = "Meeting with Recurring Occurrences.msg";
MailMessage msg = MailMessage.Load(dataDir + fileName);
MhtSaveOptions options = new MhtSaveOptions();
{
options.MhtFormatOptions = MhtFormatOptions.WriteHeader | MhtFormatOptions.RenderCalendarEvent;
//Format the output details if required - optional
//Set the display for Start Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Start))
options.FormatTemplates[MhtTemplateName.Start] = @"<span class='headerLineTitle'>Start:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.Start, @"<span class='headerLineTitle'>Start:</span><span class='headerLineText'>{0}</span><br/>");
//Set the display for End Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.End))
options.FormatTemplates[MhtTemplateName.End] = @"<span class='headerLineTitle'>End:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.End, @"<span class='headerLineTitle'>End:</span><span class='headerLineText'>{0}</span><br/>");
//Set the display for Recurrence Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Recurrence))
options.FormatTemplates[MhtTemplateName.Recurrence] = @"<span class='headerLineTitle'>Recurrence:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.Recurrence, @"<span class='headerLineTitle'>Recurrence:</span><span class='headerLineText'>{0}</span><br/>");
//Set the display for RecurrencePattern Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.RecurrencePattern))
options.FormatTemplates[MhtTemplateName.RecurrencePattern] = @"<span class='headerLineTitle'>RecurrencePattern:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.RecurrencePattern, @"<span class='headerLineTitle'>RecurrencePattern:</span><span class='headerLineText'>{0}</span><br/>");
//Set the display for Organizer Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.Organizer))
options.FormatTemplates[MhtTemplateName.Organizer] = @"<span class='headerLineTitle'>Organizer:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.Organizer, @"<span class='headerLineTitle'>Organizer:</span><span class='headerLineText'>{0}</span><br/>");
//Set the display for RequiredAttendees Property
if (options.FormatTemplates.ContainsKey(MhtTemplateName.RequiredAttendees))
options.FormatTemplates[MhtTemplateName.RequiredAttendees] = @"<span class='headerLineTitle'>RequiredAttendees:</span><span class='headerLineText'>{0}</span><br/>";
else
options.FormatTemplates.Add(MhtTemplateName.RequiredAttendees, @"<span class='headerLineTitle'>RequiredAttendees:</span><span class='headerLineText'>{0}</span><br/>");
};
msg.Save(dataDir + "Meeting with Recurring Occurrences.mhtml", options);

Экспорт Электронной Почты в MHT без Встраиваемых Изображений

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
mhtSaveOptions.SkipInlineImages = true;
eml.Save(Path.Combine(dataDir, "EmlToMhtmlWithoutInlineImages_out.mht"), mhtSaveOptions);

Экспорт Электронной Почты в MHT с Настроенной Часовой Зоной

Класс MailMessage предоставляет свойство TimeZoneOffset для установки настраиваемого времени при экспорте в MHT. Следующий фрагмент кода показывает, как экспортировать электронное письмо в MHT с настраиваемой часовой зоной.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
// Set the local time for message date.
eml.TimeZoneOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
// or set custom time zone offset for message date (-0800)
// eml.TimeZoneOffset = new TimeSpan(-8,0,0);
// The dates will be rendered by local system time zone.
MhtSaveOptions so = new MhtSaveOptions();
so.MhtFormatOptions = MhtFormatOptions.WriteHeader;
eml.Save(dataDir + "ExportEmailToMHTWithCustomTimezone_out.mhtml", so);

Изменение Шрифта при Конвертации в MHT

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string dataDir = RunExamples.GetDataDir_Email();
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
MhtSaveOptions options = SaveOptions.DefaultMhtml;
int cssInsertPos = options.CssStyles.LastIndexOf("</style>");
options.CssStyles = options.CssStyles.Insert(cssInsertPos,
".PlainText{" +
" font-family: sans-serif;" +
"}"
);
eml.Save("message.mhtml", options);

Сохранение RTF тела при конвертации MSG в EML

Конвертация MSG файла в EML с сохранением RTF тела может быть выполнена двумя способами:

Оба свойства получают или устанавливают значение, указывающее, сохранять ли rtf тело в MailMessage.

Следующие фрагменты кода показывают, как конвертировать MSG файл в EML и сохранить RTF тело:

var loadOptions = new MsgLoadOptions
{
    PreserveRtfContent = true
};

var eml = MailMessage.Load("my.msg", loadOptions);
var conversionOptions = new MailConversionOptions
{
    PreserveRtfContent = true
};

var msg = MapiMessage.Load("my.msg");

var eml = msg.ToMailMessage(conversionOptions);

Экспорт Электронной Почты в EML

Следующий фрагмент кода показывает, как экспортировать электронные письма в EML.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string dataDir = RunExamples.GetDataDir_Email();
MailMessage msg = MailMessage.Load(dataDir + "Message.eml");
msg.Save(dataDir + "ExporttoEml_out.eml", SaveOptions.DefaultEml);

Сохранение Сообщения как HTML

Класс HtmlSaveOptions позволяет экспортировать текст сообщения в HTML. Следующий фрагмент кода показывает, как сохранить сообщение как HTML.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MailMessage message = MailMessage.Load(dataDir + "Message.eml");
message.Save(dataDir + "SaveAsHTML_out.html", SaveOptions.DefaultHtml);
// OR
MailMessage eml = MailMessage.Load(dataDir + "Message.eml");
HtmlSaveOptions options = SaveOptions.DefaultHtml;
options.EmbedResources = false;
options.HtmlFormatOptions = HtmlFormatOptions.WriteHeader | HtmlFormatOptions.WriteCompleteEmailAddress; //save the message headers to output HTML using the formatting options
eml.Save(dataDir + "SaveAsHTML1_out.html", options);

Сохранение как HTML без Встраивания Ресурсов

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
var fileName = "EmailWithAttandEmbedded.eml";
var filePath = Path.Combine(dataDir, fileName);
MailMessage msg = MailMessage.Load(filePath);
var outFileName = Path.Combine(dataDir, fileName + ".html");
var options = new HtmlSaveOptions()
{
EmbedResources = false,
SaveResourceHandler =
(AttachmentBase attachment, out string resourcePath) =>
{
attachment.Save(Path.Combine(dataDir, attachment.ContentId));
resourcePath = Path.Combine(".", attachment.ContentId);
}
};
msg.Save(outFileName, options);

Сохранение Сообщения как Шаблон Outlook (.oft)

Следующий фрагмент кода показывает, как сохранить сообщение как шаблон Outlook (.oft).

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (MailMessage eml = new MailMessage("test@from.to", "test@to.to", "template subject", "Template body"))
{
string oftEmlFileName = "EmlAsOft_out.oft";
MsgSaveOptions options = SaveOptions.DefaultMsgUnicode;
options.SaveAsTemplate = true;
eml.Save(dataDir + oftEmlFileName, options);
}