Xác định và Trích xuất Tệp đính kèm Nhúng từ MSG Định dạng RTF
Contents
[
Hide
]
Các tin nhắn email có thể chứa tệp đính kèm inline được nhúng dưới dạng một đối tượng toàn bộ hoặc dưới dạng một biểu tượng. Để phân biệt giữa hai loại tệp đính kèm này, trước tiên cần xem xét một số thuộc tính của tệp đính kèm. Sau khi đáp ứng các tiêu chí nhất định dựa trên các thuộc tính của tệp đính kèm, tệp đính kèm có thể được lưu bằng cách trích xuất nó từ ObjectData của nó.
Bài viết này xác định và trích xuất tệp đính kèm nhúng từ tệp MSG định dạng RTF.
Java
static void ExtractInlineAttachments()
{
MapiMessage message = MapiMessage.fromFile("Test.msg");
MapiAttachmentCollection attachments = message.getAttachments();
for (Object untypedAttachment : attachments)
{
MapiAttachment attachment = (MapiAttachment) untypedAttachment;
if(IsAttachmentInline(attachment))
{
try
{
SaveAttachment(attachment, UUID.randomUUID().toString());
}
catch (IOException | FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
static boolean IsAttachmentInline(MapiAttachment attachment)
{
MapiObjectProperty objectData = attachment.getObjectData();
if (objectData == null)
return false;
for (Object prop : attachment.getObjectData().getProperties().getValues())
{
MapiProperty property = (MapiProperty)prop;
if ("\u0003ObjInfo".equals(property.getName()))
{
byte[] data = property.getData();
int odtPersist1 = data[1] << 8 | data[0];
return (odtPersist1 & 0x40) == 0;
}
}
return false;
}
static void SaveAttachment(MapiAttachment attachment, String fileName) throws IOException, FileNotFoundException
{
for (Object prop : attachment.getObjectData().getProperties().getValues())
{
MapiProperty property = (MapiProperty)prop;
if ("Package".equals(property.getName()))
{
FileOutputStream fs;
try
{
fs = new FileOutputStream(fileName);
fs.write(property.getData(), 0, property.getData().length);
}
catch (java.io.IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}