Загрузка и Сохранение Сообщений
Загрузка и Сохранение Сообщений
Определение Форматов Файлов
API Aspose.Email предоставляет возможность определять формат файла данного сообщения. Метод DetectFileFormat класса FileFormatUtil можно использовать для этой цели. Для определения загруженного формата файла можно использовать следующие классы и методы.
- FileFormatType Класс
- FileFormatInfo Класс
- FileFormatUtil Класс
- FileFormatUtil.DetectFileFormat(Stream) Метод
- FileFormatUtil.DetectFileFormat(String) Метод
Следующий фрагмент кода показывает, как определить форматы файлов.
// 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 и фрагмент кода позволят вам обработать подпись:
- SecureEmailManager.CheckSignature(MailMessage msg) метод.
- SecureEmailManager.CheckSignature(MailMessage msg, X509Certificate2 certificateForDecrypt) метод.
- SecureEmailManager.CheckSignature(MailMessage msg, X509Certificate2 certificateForDecrypt, X509Store store) метод.
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 тела может быть выполнена двумя способами:
-
используя свойство MsgLoadOptions.PreserveRtfContent класса MsgLoadOptions;
-
используя свойство MailConversionOptions.PreserveRtfContent класса MailConversionOptions;
Оба свойства получают или устанавливают значение, указывающее, сохранять ли 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); | |
} |