شناسایی و استخراج پیوستهای توکار از فایل MSG با قالب RTF
Contents
[
Hide
]
پیامهای ایمیل با بدنه قالب RTF ممکن است شامل پیوستهای Inline باشند که یا بهصورت یک شیء کامل یا بهصورت یک آیکون توکار میشوند. برای تمایز بین این دو نوع پیوست، ابتدا باید برخی از ویژگیهای پیوست بررسی شوند. پس از برآورده کردن معیارهای خاص بر مبنای ویژگیهای پیوست، میتوان پیوست را با استخراج آن از ObjectData ذخیره کرد.
این مقاله پیوستهای توکار را از فایل MSG با قالب RTF شناسایی و استخراج میکند.
جاوا
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();
}
}
}
}