Работа с вложениями сообщений
Управление вложениями с Aspose Outlook
Создание и сохранение файлов сообщений Outlook (MSG) объясняет, как создавать и сохранять сообщения, а также как создавать файлы MSG с вложениями. Эта статья объясняет, как управлять вложениями Microsoft Outlook с помощью Aspose.Email. Вложения из файла сообщения получаются и сохраняются на диск с использованием свойства Attachments класса MapiMessage. Свойство Attachments представляет собой коллекцию типа MapiAttachmentCollection.
Проверка, является ли вложение встроенным или обычным
Встроенные и обычные вложения служат разным целям. Встроенные вложения визуально интегрированы в сообщение электронной почты и обычно являются изображениями или мультимедийными файлами. В то время как обычные вложения — это отдельные файлы, прикрепленные к электронной почте, и могут включать различные типы файлов. Свойство MapiAttachment.IsInline класса MapiAttachment получает значение, указывающее, является ли вложение встроенным или обычным.
Следующий фрагмент кода извлекает и отображает информацию о каждом вложении в загруженном MapiMessage, включая их отображаемые имена и информацию о том, являются ли они встроенными вложениями или нет.
var message = MapiMessage.Load(fileName);
foreach (var attach in message.Attachments)
{
Console.WriteLine($"{attach.DisplayName0} : {attach.IsInline)}");
}
Сохранение вложений из файла сообщения Outlook (MSG)
Чтобы сохранить вложения из файла MSG:
- Переберите коллекцию MapiAttachmentCollection и получите отдельные вложения.
- Для сохранения вложений вызовите метод Save() класса MapiAttachment.
Следующий фрагмент кода демонстрирует, как сохранить вложения на локальный диск.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Create an instance of MapiMessage from file | |
MapiMessage message = MapiMessage.FromFile(dataDir + fileName); | |
// Iterate through the attachments collection | |
foreach (MapiAttachment attachment in message.Attachments) | |
{ | |
// Save the individual attachment | |
attachment.Save(dataDir + attachment.FileName); | |
} |
Получение вложений вложенного почтового сообщения
Встроенные OLE-вложения также появляются в коллекции вложений класса MapiMessage. Следующий пример кода разбирает файл сообщения на предмет встроенных вложений и сохраняет его на диск. Статический метод класса MapiMessage FromProperties() может создать новое сообщение из встроенного вложения. Следующий фрагмент кода показывает, как получить вложенные почтовые сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Create a MapiMessage object from the individual attachment | |
MapiMessage getAttachment = MapiMessage.FromProperties(attachment.ObjectData.Properties); | |
// Create object of type MailMessageImterpretor from the above message and Save the embedded message to file at disk | |
MailMessage mailMessage = getAttachment.ToMailMessage(new MailConversionOptions()); | |
mailMessage.Save(dataDir + @"NestedMailMessageAttachments_out.eml", SaveOptions.DefaultEml); |
Удаление вложений
Библиотека Aspose Outlook предоставляет функциональность для удаления вложений из файлов сообщений Microsoft Outlook (.msg):
- Вызовите метод RemoveAttachments(). Он принимает путь к файлу сообщения в качестве параметра. Этот метод реализован как открытый статический метод, поэтому вам не нужно создавать объект.
Следующий фрагмент кода показывает, как удалить вложения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MapiMessage.RemoveAttachments(dataDir + "AttachmentsToRemove_out.msg"); |
Вы также можете вызвать статический метод класса MapiMessage DestoryAttachment(). Он работает быстрее, чем RemoveAttachment(), поскольку метод RemoveAttachment() разбирает файл сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MapiMessage.DestroyAttachments(dataDir + "AttachmentsToDestroy_out.msg"); |
Добавление вложений MSG
Сообщение Outlook может содержать другие сообщения Microsoft Outlook в качестве вложений либо в виде обычных, либо встроенных сообщений. Коллекция MapiAttachmentCollection предоставляет перегруженные члены метода Add для создания сообщений Outlook с обоими типами вложений.
Попробуйте!
Добавьте или удалите вложения электронной почты с помощью бесплатного Aspose.Email Editor App.
Добавление ReferencAttachments к MapiMessage
Метод MapiAttachmentCollection.Add(string name, string sharedLink, string url, string providerName) класса MapiAttachmentCollection позволяет добавлять ссылочные вложения в MapiMessage. Когда получатели электронного письма нажимают на ссылочное вложение, они могут получить доступ к связанному файлу, если у них есть соответствующие разрешения для этого. Используя ссылочное вложение, вы можете отправить меньшее сообщение электронной почты и убедиться, что у всех есть доступ к самой последней версии файла или элемента.
У метода следующие параметры:
- name - имя вложения
- sharedLink - полностью квалифицированная ссылка на вложение, предоставленная веб-сервисом, управляющим вложением
- url - местоположение файла
- providerName - имя поставщика ссылочного вложения
Пример кода ниже демонстрирует, как добавить ссылочное вложение к сообщению:
// Допустим, вы хотите отправить электронное сообщение, которое включает ссылку на файл Document.pdf, хранящийся на Google Drive.
// Вместо того, чтобы прикреплять документ непосредственно к электронному сообщению,
// вы можете создать ссылочное вложение, которое ссылается на файл на Google Drive.
// Создайте сообщение
var msg = new MapiMessage("from@domain.com", "to@domain.com", "Файл сообщения Outlook",
"Это сообщение создано с помощью Aspose.Email", OutlookMessageFormat.Unicode);
// Добавьте ссылочное вложение
msg.Attachments.Add("Document.pdf",
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive");
//Кроме того, вы можете установить дополнительные свойства вложения
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentPermissionType, AttachmentPermissionType.AnyoneCanEdit);
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentOriginalPermissionType, 0);
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentIsFolder, false);
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentProviderEndpointUrl, "");
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentPreviewUrl, "");
msg.Attachments[0].SetProperty(KnownPropertyList.AttachmentThumbnailUrl, "");
// Наконец, сохраните сообщение
msg.Save(@"my.msg");
Встраивание сообщения как вложения
Следующий фрагмент кода показывает, как встроить вложение MSG в сообщение.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MapiMessage message = new MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body"); | |
MapiMessage attachMsg = MapiMessage.FromFile(dataDir + "Message.msg"); | |
message.Attachments.Add("Weekly report.msg", attachMsg); | |
message.Save(dataDir + "WithEmbeddedMsg_out.msg"); |
Чтение встроенных сообщений из вложений
Следующий фрагмент кода показывает, как читать встроенные сообщения из вложений.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
var message = MapiMessage.FromFile(fileName); | |
if (message.Attachments[0].ObjectData.IsOutlookMessage) | |
{ | |
var getData = message.Attachments[0].ObjectData.ToMapiMessage(); | |
} |
Вставка и замена вложений
API Aspose.Email предоставляет возможность вставлять вложения в определенный индекс в родительском сообщении. Он также предоставляет возможность заменить содержимое вложения другим вложением сообщения.
Попробуйте!
Запустите простой проект приложения ReplaceAttach и опробуйте возможности Aspose.Email для замены вложений в действии.
Вставка в определенное место
API Aspose.Email предоставляет возможность вставить вложение MSG в родительский MSG, используя метод вставки MapiAttachmentCollection MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Следующий фрагмент кода показывает, как вставить вложение в определенное место.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
var message = MapiMessage.FromFile(fileName); | |
var memoryStream = new MemoryStream(); | |
message.Attachments[2].Save(memoryStream); | |
var getData = MapiMessage.FromStream(memoryStream); | |
message.Attachments.Insert(1, "new 11", getData); |
Замена содержимого вложения
Это можно использовать для замены содержимого встроенного вложения на новые с помощью метода Replace. Однако его нельзя использовать для вставки вложения с PR_ATTACH_NUM = 4 (например) в коллекцию с collection.Count = 2. Следующий фрагмент кода показывает, как заменить содержимое вложения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
var message = MapiMessage.FromFile(fileName); | |
var memeoryStream = new MemoryStream(); | |
message.Attachments[2].Save(memeoryStream); | |
var getData = MapiMessage.FromStream(memeoryStream); | |
message.Attachments.Replace(1, "new 1", getData); |
Переименование вложения в MapiMessage
Возможно редактировать значение свойства DisplayName в вложениях MapiMessage.
var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "Новое отображаемое имя 1";
msg.Attachments[1].DisplayName = "Новое отображаемое имя 2";
Сохранение вложений из цифровых подписанных сообщений
API Aspose.Email предоставляет возможность получать или устанавливать значение, указывающее, будет ли декодироваться сообщение с чистой подписью.