Управление файлами сообщений с помощью Aspose.Email.Outlook

Contents
[ ]

Получение типа элемента MAPI

The MapiItemType enum представляет собой тип элемента MAPI, который можно явно преобразовать в объект соответствующего класса, производный от IMapiMessageItemинтерфейс. Таким образом, пользователи могут избежать проверки MessageClass значение свойства до преобразования сообщения.

В следующем примере кода показано, как определить тип конвертируемого элемента:

foreach (var messageInfo in folder.EnumerateMessages())
{
    var msg = pst.ExtractMessage(messageInfo);

    switch (msg.SupportedType)
    {
        // Non-supported type. MapiMessage cannot be converted to an appropriate item type.
        // Just use in MSG format.
        case MapiItemType.None:
            break;
        // An email message. Conversion isn't required.
        case MapiItemType.Message:
            break;
        // A contact item. Can be converted to MapiContact.
        case MapiItemType.Contact:
            var contact = (MapiContact)msg.ToMapiMessageItem();
            break;
        // A calendar item. Can be converted to MapiCalendar.
        case MapiItemType.Calendar:
            var calendar = (MapiCalendar)msg.ToMapiMessageItem();
            break;
        // A distribution list. Can be converted to MapiDistributionList.
        case MapiItemType.DistList:
            var dl = (MapiDistributionList)msg.ToMapiMessageItem();
            break;
        // A Journal entry. Can be converted to MapiJournal.
        case MapiItemType.Journal:
            var journal = (MapiJournal)msg.ToMapiMessageItem();
            break;
        // A StickyNote. Can be converted to MapiNote.
        case MapiItemType.Note:
            var note = (MapiNote)msg.ToMapiMessageItem();
            break;
        // A Task item. Can be converted to MapiTask.
        case MapiItemType.Task:
            var task = (MapiTask)msg.ToMapiMessageItem();
            break;
    }
}

Сохранение электронной почты в формате HTML

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

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

В следующем примере кода показано, как сохранить электронное письмо с относительным путем к ресурсам по умолчанию:

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

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

Настройка тайм-аута для процесса преобразования и загрузки сообщений

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

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

  • 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);

Чтение и запись файла шаблона Outlook (.OFT)

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

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

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

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

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

Сохранение MSG-файла Outlook в качестве шаблона

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

Определите, является ли сообщение MapiMessage 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

The 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:

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

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

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

Настройка цветовой категории для файлов Outlook MSG

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

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

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

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

Доступ к последующей информации из файла MSG

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

Получение информации о прочтении и получении

В следующем фрагменте кода показано, как получить информацию о прочтении и получении.

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

Aspose.Email API предоставляет возможность создавать и форматировать сообщения для пересылки и ответа. ReplyMessageBuilder and ForwardMessageBuilder классы API используются для создания сообщений Reply и Forward соответственно. Можно указать, что сообщение «Ответить» или «Переслать» можно создать с помощью любого из режимов OriginalMessageAdditionMode перечисление. Это перечисление имеет следующие значения:

  • OriginalMessageAdditionMode.None - Исходное сообщение не включено в ответное сообщение.
  • OriginalMessageAdditionMode.Attachment - Исходное сообщение включено в ответное сообщение в виде вложения
  • OriginalMessageAdditionMode.Textpart - Исходное сообщение включено в виде текста в текст ответного сообщения

Создание ответного сообщения

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

Создание пересылающего сообщения

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