זיהוי והוצאת קובץ מצורף משובץ מקובץ MSG בפורמט RTF
Contents
[
Hide
]
הודעות דוא"ל עם גוף בפורמט RTF עשויות להכיל קבצים מצורפים משולבים שיכולים להיות משובצים כאובייקט שלם או כסמל. כדי להבדיל בין שני סוגי הקבצים המצורפים, יש לבדוק תחילה כמה מאפיינים של הקובץ המצורף. לאחר עמידה בקריטריונים מסוימים בהתבסס על מאפייני הקובץ, ניתן לשמור את הקובץ על‑ידי חילוצו מ‑ObjectData שלו.
מאמר זה מזהה ומוציא קובץ מצורף משובץ מקובץ MSG בפורמט 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();
}
}
}
}