Загрузка и сохранение сообщений
Загрузка и сохранение электронных писем
Определить формат файла
API Aspose.Email предоставляет возможность определить формат файла предоставленного сообщения. The DetectFileFormat метод FileFormatUtil класс можно использовать для этого. Следующие классы и методы могут быть использованы для обнаружения загруженного формата файла.
- FileFormatType Класс
- FileFormatInfo Класс
- FileFormatUtil Класс
- FileFormatUtil.detectFileFormat(Stream) Method
- FileFormatUtil.detectFileFormat(String) Method
Следующий фрагмент кода показывает, как обнаружить форматы файлов.
Загрузить электронное письмо
Чтобы загрузить сообщение с определёнными параметрами загрузки, Aspose.Email предоставляет the LoadOptions класс, который можно использовать следующим образом:
Сохранить формат вложенного сообщения при загрузке
Сохранение и конвертация электронных писем
Aspose.Email упрощает конвертацию любого типа сообщения в другой формат. Чтобы продемонстрировать эту возможность, код в этой статье загружает три типа сообщений с диска и сохраняет их в другие форматы. Базовый класс SaveOptions и классы EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions для дополнительных параметров при сохранении MailMessage может быть использован для сохранения сообщений в другие форматы. Статья показывает, как использовать эти классы для сохранения примера письма как:
- Формат EML.
- Outlook MSG.
- Формат MHTML.
- Формат HTML.
Загрузка и сохранение электронного письма
Следующий фрагмент кода показывает, как загрузить сообщение EML и сохранить его на диск в том же формате.
Загрузка и сохранение письма с сохранением оригинальных границ
Следующий фрагмент кода показывает, как загрузить EML и сохранить как EML, сохраняя оригинальные границы.
Сохранение как EML с сохранением вложений TNEF
Следующий фрагмент кода показывает, как сохранить как EML, сохраняя вложения TNEF.
Сохранить EML в MSG
Следующий фрагмент кода показывает, как загрузить сообщение EML и конвертировать его в MSG, используя соответствующую опцию из SaveOptions.
Сохранить EML в MSG с сохранёнными датами
Этот MsgSaveOptions класс позволяет сохранить исходное сообщение как файл Outlook Message (MSG), сохраняя даты. Следующий фрагмент кода показывает, как сохранить как MSG с сохранёнными датами.
Сохранить EML как MHTML
Разные параметры MHTML могут быть использованы для получения желаемых результатов. Следующий фрагмент кода показывает, как загрузить сообщение EML в MailMessage и конвертировать его в MHTML с датой сообщения в системе UTC.
// Set options for MHTML output
MhtSaveOptions saveOptions = SaveOptions.getDefaultMhtml();
// save a message date as UTC date
saveOptions.setPreserveOriginalDate(false);
// Initialize and load an existing EML file
try (MailMessage mailMessage = MailMessage.load(dataDir + "Message.eml")) {
mailMessage.save(outDir + "Message_out.mhtml", saveOptions);
}
Глобальное форматирование заголовков MHT при сохранении из EML
С Aspose.Email вы можете использовать глобальные параметры форматирования для заголовка Mht. Глобальные параметры задают общее форматирование заголовка Mht для всех MhtSaveOptions экземпляров. Эта функция предназначена для избегания установки форматирования для каждого экземпляра MhtSaveOptions.
Используйте следующие методы GlobalFormattingOptions класс и пример кода ниже для установки форматирования заголовка Mht:
- setPageHeaderFormat(String value) - PageHeaderFormat для экземпляров HeadersFormattingOptions, если DefaultPageHeaderFormat не установлен.
- setHeaderFormat(String value) - HeaderFormat для экземпляров HeadersFormattingOptions, если DefaultHeaderFormat не установлен.
- setBeforeHeadersFormat(String value) - BeforeHeadersFormat для экземпляров HeadersFormattingOptions, если BeforeHeadersFormat не установлен.
- setAfterHeadersFormat(String value) - AfterHeadersFormat для экземпляров HeadersFormattingOptions, если AfterHeadersFormat не установлен.
// saveOptions1 and saveOptions2 have the same mht header formatting
MhtSaveOptions saveOptions1 = new MhtSaveOptions();
MhtSaveOptions saveOptions2 = new MhtSaveOptions();
Конвертировать EML в MHTML с дополнительными настройками
Этот MhtSaveOptions класс предоставляет дополнительные параметры для сохранения сообщений в формате MHTML. Перечисление MhtFormatOptions делает возможным запись дополнительной информации о письме в выходной MHTML. Можно записать следующие дополнительные поля:
- WriteHeader - записывает заголовок письма в выходной файл.
- WriteOutlineAttachments - записывает оглавление вложений в выходной файл.
- WriteCompleteEmailAddress - записывает полный email‑адрес в выходной файл.
- NoEncodeCharacters - не следует использовать кодирование символов при передаче.
- HideExtraPrintHeader - скрыть дополнительный заголовок печати в верхней части выходного файла.
- WriteCompleteToEmailAddress - записывает полный email‑адрес получателя в выходной файл.
- WriteCompleteFromEmailAddress - записывает полный email‑адрес отправителя в выходной файл.
- WriteCompleteCcEmailAddress - записывает полные email‑адреса получателей в копии (Cc) в выходной файл.
- WriteCompleteBccEmailAddress - записывает полный email‑адрес получателей в скрытой копии (Bcc) в выходной файл.
- RenderCalendarEvent - записывает текст календарного события в выходной файл.
- SkipByteOrderMarkInBody - записывает байты маркера порядка байтов (BOM) в выходной файл.
- RenderVCardInfo - записывает текст из альтернативного представления VCard в выходной файл.
- DisplayAsOutlook - отображать заголовок From.
- RenderTaskFields - записывает определённые поля задачи в выходной файл.
- None - Настройки не указаны.
Следующий фрагмент кода показывает, как конвертировать файлы EML в MHTML с дополнительными настройками.
Отрисовка событий календаря при конвертации в MHTML
Этот MhtFormatOptions.RenderCalendarEvent отображает события календаря в выходном MHTML. Следующий фрагмент кода показывает, как отрисовать события календаря при конвертации в MHTML.
Экспортировать письмо в MHT без встроенных изображений
Экспорт письма в MHT с пользовательским часовым поясом
MailMessage class предоставляет setTimeZoneOffset Свойство для установки пользовательского часового пояса при экспорте в MHT. Следующий фрагмент кода показывает, как экспортировать письмо в MHT с настроенным часовым поясом.
MailMessage msg = MailMessage.load(filename, new MsgLoadOptions());
msg.setDate(new Date());
// Set the timezone offset in milliseconds
msg.setTimeZoneOffset(5*60*60*1000);
MhtSaveOptions mhtOptions = new MhtSaveOptions();
mhtOptions.setMhtFormatOptions(MhtFormatOptions.WriteHeader);
msg.save(dataDir + "ExportToMHTWithCustomTimezone_out.mhtml", mhtOptions);
Экспорт электронной почты в EML
Следующий фрагмент кода показывает, как экспортировать электронные письма в формат EML.
Сохранить письмо в формате HTML
Этот HtmlSaveOptions Класс позволяет экспортировать тело сообщения в HTML. Следующий фрагмент кода показывает, как сохранить сообщение в формате HTML.
Сохранить сообщение электронной почты в HTML с относительными путями к ресурсам
При экспорте сообщений электронной почты в формат HTML можно выбрать сохранение ресурсов письма с относительными путями. Эта возможность предоставляет большую гибкость в привязке ресурсов в выходном HTML‑файле, облегчая обмен и отображение сохранённых писем на различных системах. HtmlSaveOptions.UseRelativePathToResources Свойство предоставляет возможность сохранять ресурсы с относительными путями. Значение свойства по умолчанию — false (ресурсы сохраняются с абсолютными путями). При установке в true ресурсы сохраняются с относительными путями. HTML‑файлы с относительными путями более переносимы и могут корректно просматриваться независимо от структуры файлов в среде размещения. Вы можете выбирать между абсолютными и относительными путями в зависимости от требований. Пользовательские пути к ресурсам можно задать используя ResourceHtmlRenderingHandler событие.
Сохранить с относительным путем по умолчанию к ресурсам
MapiMessage msg = MapiMessage.load(sourceFileName);
HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(true);
msg.save("target.html", htmlSaveOptions);
В этом случае ресурсы будут сохранены в папке [html file name].files, в том же пути, что и .html файл, и HTML будет ссылаться на ресурсы через относительные пути.
Сохранить с абсолютным путем к ресурсам
MapiMessage msg = MapiMessage.load(sourceFileName);
HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);
msg.save("target.html", htmlSaveOptions);
Как и в первом случае, ресурсы по умолчанию сохраняются в папке [html file name].files, но HTML будет ссылаться на ресурсы используя абсолютные пути.
Пользовательский относительный путь с использованием события ResourceHtmlRenderingHandler
MapiMessage msg = MapiMessage.load(sourceFileName);
HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);
htmlSaveOptions.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {
@Override
public void invoke(Object sender, ResourceHtmlRenderingEventArgs args) {
if (sender instanceof AttachmentBase) {
AttachmentBase attachment = (AttachmentBase) sender;
// Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
args.setPathToResourceFile("images\\" + attachment.getContentType().getName());
}
}
});
msg.save(targetPath + "A Day in the Park.html", htmlSaveOptions);
Используя ResourceHtmlRenderingHandler событие, вы можете задавать пользовательские относительные или абсолютные пути для ресурсов. При настройке путей с помощью ResourceHtmlRenderingHandler обработчик события, и поскольку UseRelativePathToResources установлено в true, вам следует задать относительный путь к PathToResourceFile Свойство для обеспечения правильных ссылок.
Сохранить пользовательские значки в сообщении при конвертации в HTML
Иногда сообщение содержит встроенные вложения, которые отображаются в виде значков в теле сообщения. Такие сообщения могут создать проблемы при конвертации в HTML, поскольку изображения значков теряются. Это происходит потому, что значки вложений не хранятся непосредственно в сообщении.
Пользователь Aspose.Email может настроить значки вложений при конвертации сообщения в HTML. Для этого HtmlSaveOptions.ResourceHtmlRendering Событие используется для настройки отображения файлов ресурсов (например, вложений) при сохранении сообщения электронной почты в HTML-файл. В примере кода ниже обработчик события динамически задаёт путь к файлам ресурсов (значкам) в зависимости от типа содержимого вложения. Это позволяет выполнять кастомное отображение ресурсов в выводимом HTML в зависимости от их типа файлов.
HtmlSaveOptions options = new HtmlSaveOptions();
options.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {
@Override
public void invoke(Object sender, ResourceHtmlRenderingEventArgs e) {
AttachmentBase attachment = (AttachmentBase) sender;
e.setCaption(attachment.getContentType().getName());
if (attachment.getContentType().getName().endsWith(".pdf")) {
e.setPathToResourceFile("pdf_icon.png");
} else if (attachment.getContentType().getName().endsWith(".docx")) {
e.setPathToResourceFile("word_icon.jpg");
} else if (attachment.getContentType().getName().endsWith(".jpg")) {
e.setPathToResourceFile("jpeg_icon.png");
} else {
e.setPathToResourceFile("not_found_icon.png");
}
}
});
options.setResourceRenderingMode(ResourceRenderingMode.SubstituteFromFile);
String fileName = "message.msg";
MailMessage mailMessage = MailMessage.load(fileName);
mailMessage.save("fileName.html", options);
Установить время и часовой пояс при сохранении EML в HTML
Пользователи Aspose.Email могут задавать форматы отображения времени и часового пояса в HtmlSaveOptions. Это HeadersFormattingOptions Класс позволяет задавать параметры форматирования заголовков при сохранении MailMessage в формат Mhtml или Html. Следующие методы класса HtmlFormatOptions Класс задает поля, которые будут отображаться в выходном файле:
- RenderCalendarEvent - Указывает, что текст из события календаря должен быть записан в выходной mhtml.
- RenderVCardInfo - Указывает, что текст из AlternativeView VCard должен быть записан в выходной HTML.
Следующий пример кода показывает, как установить время и часовой пояс при сохранении EML в HTML:
MailMessage msg = MailMessage.load("fileName");
HtmlSaveOptions options = new HtmlSaveOptions();
options.setHtmlFormatOptions(HtmlFormatOptions.WriteHeader);
options.getFormatTemplates().set_Item("DateTime", "MM d yyyy HH:mm tt");
Сохранение в HTML без вложения ресурсов
Сохранение сообщения как шаблон Outlook (.oft)
Следующий фрагмент кода показывает, как сохранить сообщение как шаблон Outlook (.oft).