Управление сообщениями Outlook

Сохранить письма в формате HTML

Aspose.Email позволяет сохранять ресурсы электронных писем с относительными путями при экспорте сообщений в формат HTML. Эта функция обеспечивает большую гибкость в связывании ресурсов в результирующем HTML‑файле, упрощая обмен и отображение сохранённых писем на разных системах. Чтобы сохранять ресурсы с относительными путями, используйте HtmlSaveOptions.UseRelativePathToResources свойства. Значение свойства по умолчанию — false (ресурсы сохраняются с абсолютными путями). При установке в true ресурсы сохраняются с относительными путями.

HTML‑файлы с относительными путями более портативны и могут корректно отображаться независимо от структуры файлов в среде хостинга. Вы можете выбирать между абсолютными и относительными путями в зависимости от требований. Вы можете задавать пользовательские пути к ресурсам с помощью ResourceHtmlRendering событие.

Следующий пример кода демонстрирует, как сохранять электронное письмо с относительным путём к ресурсам по умолчанию:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

В этом случае ресурсы будут сохраняться в папке [html file name]_files, в том же пути, что и файл .html, и HTML будет ссылаться на ресурсы через относительные пути.

Пример кода ниже демонстрирует, как сохранять с абсолютным путём к ресурсам:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = false
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

Как и в первом случае, ресурсы по умолчанию сохраняются в папке [html file name]_files, но HTML будет ссылаться на ресурсы с помощью абсолютных путей.

Используя ResourceHtmlRendering событие, вы можете задавать пользовательские относительные или абсолютные пути для ресурсов. При настройке путей с помощью ResourceHtmlRendering обработчик события, и поскольку UseRelativePathToResources установлено в true, вам следует задать относительный путь к PathToResourceFile Свойство для обеспечения правильных ссылок.

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

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

htmlSaveOptions.ResourceHtmlRendering += (o, args) =>
{
    if (o is AttachmentBase attachment)
    {
	    // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
        args.PathToResourceFile = $@"images\{attachment.ContentType.Name}";
    }
};

msg.Save(Path.Combine(targetPath, "A Day in the Park.html"), htmlSaveOptions);

Конвертировать MSG в MIME сообщения

API Aspose.Email предоставляет возможность конвертировать файлы MSG в MIME‑сообщения с помощью ToMailMessage метод.

Установить тайм‑ауты для конвертации и загрузки сообщений

Следующие возможности позволят задать тайм‑аут в миллисекундах для процесса конвертации и загрузки:

  • MailConversionOptions.Timeout property — ограничивает время в миллисекундах при конвертации сообщения.

  • MailConversionOptions.TimeoutReached - Выбрасывается, если время ожидания истекло при конвертации в MailMessage.

  • MsgLoadOptions.Timeout - Ограничивает время в миллисекундах при конвертации сообщения.

  • MsgLoadOptions.TimeoutReached - Выбрасывается, если время ожидания истекло при конвертации в MailMessage.

Пример кода ниже покажет, как установить тайм‑аут при конвертации сообщения:

var options = new MailConversionOptions();
// Set the timeout to 5 seconds
options.Timeout = 5000;

options.TimeoutReached += (object sender, EventArgs args) =>
{
    string subj = (sender as MailMessage).Subject;
	 // Set a flag indicating the timeout was reached
    isTimedOut = true;
};

var mailMessage = mapiMessage.ToMailMessage(options);

Конвертация MSG в EML с сохранением тела RTF

Конвертация файла 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);

Работа с файлами шаблонов Outlook (.OFT)

Шаблоны Outlook очень полезны, когда нужно отправлять одинаковое электронное сообщение снова и снова. Вместо того чтобы каждый раз готовить сообщение с нуля, сначала подготовьте его в Outlook и сохраните как шаблон Outlook (OFT). Затем, когда понадобится отправить сообщение, вы можете создать его из шаблона, экономя время на ввод того же текста в тело или строку темы, настройку форматирования и т.д. Aspose.Email MailMessage класс можно использовать для загрузки и чтения файла шаблона Outlook (OFT). Как только шаблон Outlook загружен в экземпляр MailMessage класс, вы можете обновить отправителя, получателя, тело, тему и другие свойства. После обновления свойств:

  • Отправить письмо, используя SmtpClient класс или
  • Сохраняем сообщение как MSG и выполняем дальнейшие обновления/проверку с помощью Microsoft Outlook.

В приведённых ниже кодовых примерах мы:

  1. Загрузить шаблон, используя MailMessage класс.
  2. Обновить некоторые свойства.
  3. Сохранить сообщение в формате MSG.

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

Сохранить файлы MSG как шаблоны

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

Определить тип MAPI‑сообщения (OFT или MSG)

При загрузке объекта MapiMessage из файла может потребоваться определить, является ли загруженное сообщение файлом шаблона или обычным письмом. С помощью IsTemplate свойство MapiMessage класс, позволяющий точно определить, является ли электронное письмо шаблоном. Эта возможность может быть полезна при работе и обработке различных типов файлов электронной почты в приложениях и системах.

Приведённый ниже пример кода демонстрирует, как определить, является ли MapiMessage форматом OFT или MSG:

var msg = MapiMessage.Load("message.msg");
var isOft = msg.IsTemplate; // returns false

var msg = MapiMessage.Load("message.oft");
var isOft = msg.IsTemplate; // returns true

Сохранить MapiMessage или MailMessage в формате OFT

Этот SaveOptions класс позволяет задавать дополнительные параметры при сохранении MailMessage или MapiMessage в определённый формат.

Следующий пример кода демонстрирует, как сохранить сообщение в формате OFT:

// Save the MailMessage to OFT format
using (var eml = MailMessage.Load("message.eml"))
{
    eml.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);

}

// Save the MapiMessage to OFT format
using (var msg = MapiMessage.Load("message.msg"))
{
    msg.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
}

Управление цифрово подписанными сообщениями

Aspose.Email реализует полный алгоритм объекта электронной почты S/MIME. Это даёт API полные возможности сохранять цифровые подписи при конвертации сообщений между форматами.

Сохранить подпись при конвертации EML в MSG

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

Конвертировать сообщения S/MIME из MSG в EML

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

Проверка подписей защищённых писем

Следующие возможности доступны для проверки подписи объектов MapiMessage.

Пример кода ниже показывает, как внедрить эти функции в ваш проект:

var msg = MapiMessage.Load(fileName, new EmlLoadOptions());
var result = new SecureEmailManager().CheckSignature(msg);

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

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

Удалить подписи из MapiMessage

Для лучшей совместимости, MapiMessage.RemoveSignature метод и MapiMessage.IsSigned свойства используются для удаления цифровой подписи из сообщения.

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

var msg = MapiMessage.Load(fileName);

if (msg.IsSigned)
{
    var unsignedMsg = msg.RemoveSignature();
}

Расшифровать MapiMessage с помощью сертификатов

Если у вас есть зашифрованные MAPI‑сообщения и необходимо расшифровать их с помощью закрытого ключа, хранящегося в сертификате, следующие возможности Aspose.Email могут быть полезны:

  • MapiMessage.IsEncrypted - Возвращает значение, указывающее, зашифровано ли сообщение.
  • MapiMessage.Decrypt() - Расшифровывает это сообщение (метод ищет в хранилищах My текущего пользователя и компьютера соответствующий сертификат и закрытый ключ).
  • MapiMessage.Decrypt(X509Certificate2 certificate) - Расшифровывает это сообщение с помощью сертификата.

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

var privateCert = new X509Certificate2(privateCertFile, "password");
var msg = MapiMessage.Load("encrypted.msg");

if (msg.IsEncrypted);
{
    var decryptedMsg = msg.Decrypt(privateCert);
}

Установить цветовые категории для файлов MSG

Цветовая категория помечает электронное письмо как важное или определённого типа. Microsoft Outlook позволяет пользователям назначать цветовые категории для различения писем. Чтобы работать с цветовой категорией, используйте FollowUpManager. Он содержит функции, такие как AddCategory, RemoveCategory, ClearCategories и GetCategories.

  • AddCategory принимает MapiMessage и строку цветовой категории, например, "Purple Category" или "Red Category", в качестве аргументов.
  • RemoveCategory принимает MapiMessage и строка цветовой категории, которую нужно удалить из сообщения.
  • ClearCategories используется для удаления всех цветовых категорий из сообщения.
  • GetCategories используется для получения всех цветовых категорий из конкретного сообщения.

Следующий пример выполняет указанные ниже задачи:

  1. Добавить цветовую категорию.
  2. Добавить еще одну цветовую категорию.
  3. Получить список всех категорий.
  4. Удалить все категории.

Получить информацию о последующей обработки в файлах MSG

API Aspose.Email предоставляет возможность доступа к информации о последующих действиях из отправленного или полученного сообщения. Он может получать информацию о прочтении, подтверждении доставки и результатах голосования из файла сообщения.

Получить информацию о прочтении и подтверждении доставки

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

Создать сообщения‑пересылки и ответы

API Aspose.Email предоставляет возможность создавать и форматировать сообщения‑пересылки и ответы. Создание пересылаемых и ответных сообщений и Aspose.Email API предоставляет возможность создавать и форматировать сообщения‑пересылки и‑ответы. ReplyMessageBuilder ForwardMessageBuilder классы API используются для создания ответных и пересылаемых сообщений соответственно. Сообщение‑ответ или‑пересылка может быть создано с использованием любого из режимов

  • OriginalMessageAdditionMode
  • перечисление. Это перечисление имеет следующие значения:
  • OriginalMessageAdditionMode.Textpart — оригинальное сообщение включается в виде текста в тело сообщения‑ответа

Создать сообщения‑ответы

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

Создать сообщения‑пересылки

Ниже показан фрагмент кода, демонстрирующий, как создать сообщение‑ответ.