Работа с вложениями сообщений
Разбор и сохранение вложений
Файлы сообщений Outlook могут содержать одно или несколько вложений. Aspose.Email позволяет разработчикам проходить по вложениям в файле MSG и сохранять их на диск. Эта тема описывает процесс. Также описывается, как встроить вложение.
Класс Aspose.Email MapiMessage используется для загрузки файла MSG с диска и предоставляет метод getAttachments(), который ссылается на коллекцию объектов MapiAttachment, связанных с файлом MSG. Объект MapiAttachment дополнительно предоставляет методы, которые выполняют действия с вложением.
Чтобы сохранить вложения в файле MSG на диск с оригинальным именем и расширением:
- Создайте экземпляр класса MapiMessage, чтобы загрузить файл MSG, используя статический метод Load().
- Вызовите метод getAttachments() класса MapiRecipient, чтобы получить ссылку на коллекцию объектов MapiAttachment, связанных с файлом MSG.
- Пройдите в цикле по MapiAttachmentCollection, чтобы отобразить содержание каждого объекта MapiAttachment через его публичные методы.
- Вызовите метод save() класса MapiAttachment, чтобы сохранить вложение на диск.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java //Instantiate an MSG file to load an MSG file from disk MapiMessage outlookMessageFile = MapiMessage.fromFile(dataDir + "WithEmbeddedMsg.msg"); //Loop through the attachments collection associated with the MapiMessage object for (int i = 0; i < outlookMessageFile.getAttachments().size(); i++) { //Set a reference to the MapiAttachment object MapiAttachment outlookMessageAttachment = (MapiAttachment) outlookMessageFile.getAttachments().get_Item(i); //Display attachment type System.out.println("Att Type : " + outlookMessageAttachment.getMimeTag()); //Display attached file name System.out.println("File Name : " + outlookMessageAttachment.getLongFileName()); //Save attachment to the disk outlookMessageAttachment.save(dataDir + outlookMessageAttachment.getDisplayName()); }
Встраивание сообщений как вложений
Сообщение Microsoft Outlook может содержать другие сообщения Microsoft Outlook во вложениях либо в виде обычных сообщений, описанных выше, либо встроенных сообщений. Коллекция MapiAttachmentCollection предоставляет перегруженные члены метода add для создания сообщений Outlook с обоими типами вложений. Вложенные в файл MSG сообщения содержат PR_ATTACH_METHOD со значением 5.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
MapiMessage msg = new MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body"); | |
MapiMessage attachMsg = MapiMessage.fromFile(dataDir + "message.msg"); | |
msg.getAttachments().add("Weekly report", attachMsg); | |
msg.save(dataDir + "EmbededMessageAsAttachment.msg"); |
Чтение встроенного сообщения из вложения
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
MapiMessage mapi = MapiMessage.fromFile(dataDir + "EmbededMessageAsAttachment.msg"); | |
MapiMessage emb = mapi.getAttachments().get_Item(0).getObjectData().toMapiMessage(); |
Вставка и замена вложений MSG
API Aspose.Email предоставляет возможность вставлять вложения по определенному индексу в родительском сообщении. Он также предоставляет возможность замены содержимого вложения другим вложением.
Вставить вложение MSG в конкретное место
API Aspose.Email предоставляет возможность вставить вложение MSG в родительский MSG, используя метод MapiAttachmentCollection.Insert().
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
MapiMessage msg = MapiMessage.fromFile(dataDir + "WithEmbeddedMsg.msg"); | |
msg.getAttachments().get_Item(0).save(dataDir + "attachment_out.msg"); | |
MapiMessage emb = MapiMessage.fromStream(new FileInputStream(dataDir + "WithEmbeddedMsg.msg")); | |
msg.getAttachments().insert(1, "new 11", emb); | |
msg.save(dataDir + "insertMSGAttachment_out.msg"); |
Заменить содержимое встроенного вложения MSG
Это можно использовать для замены содержимого встроенного вложения новыми, используя метод 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-Java | |
MapiMessage msg = MapiMessage.fromFile(dataDir + "insertMSGAttachment_out.msg"); | |
msg.getAttachments().get_Item(0).save(dataDir + "attachment_out.msg"); | |
MapiMessage emb = MapiMessage.fromStream(new FileInputStream(dataDir + "insertMSGAttachment_out.msg")); | |
msg.getAttachments().replace(1, "new 1", emb); | |
msg.save(dataDir + "replaceEmbeddedMSGAttachment_out.msg"); |
Сохранение вложений из цифрово подписанного сообщения
API Aspose.Email предоставляет возможность получить или установить значение, указывающее будет ли расшифровываться ясно подписанное сообщение.
Переименование вложения в MapiMessage
Aspose.Email позволяет редактировать значение свойства DisplayName в вложениях MapiMessage.
Следующий пример кода демонстрирует, как обновить имена дисплеев первых и вторых вложений в загруженном сообщении Mapi:
MapiMessage msg = MapiMessage.load(fileName);
msg.getAttachments().get_Item(0).setDisplayName("Новое имя дисплея 1");
msg.getAttachments().get_Item(1).setDisplayName("Новое имя дисплея 2");
Проверка, является ли вложение встроенным или обычным
Разница между встроенными и обычными вложениями заключается в том, как они представлены в электронном письме. Встроенные вложения встраиваются в тело письма и могут быть просмотрены без необходимости открывать отдельный файл или что-либо загружать. Обычные вложения, с другой стороны, являются отдельными файлами, прикрепленными к письму, но не отображаются непосредственно в теле сообщения и должны быть загружены и открыты отдельно. Свойство MapiAttachment.IsInline класса MapiAttachment получает значение, указывающее, является ли вложение встроенным или обычным.
Следующий пример кода загружает сообщение электронной почты из файла и затем извлекает информацию о вложениях, в частности, выводит имя дисплея каждого вложения и является ли оно встроенным в сообщение или нет:
MapiMessage message = MapiMessage.load("fileName");
for (MapiAttachment attach : message.getAttachments()) {
System.out.println(attach.getDisplayName() + ": " + attach.isInline());
}