इनलाइन और नियमित अटैचमेंट्स के बीच अंतर करें

Contents
[ ]

यह लेख उपयोग करके इनलाइन अटैचमेंट्स को सामान्य अटैचमेंट्स से अलग करने का तरीका समझाता है MapiMessage. निर्णय लेते समय, बॉडी प्रकार MapiMessage को इस प्रकार माना जाता है:

  • सादा पाठ बॉडी: साधारण पाठ बॉडी वाले ईमेल संदेशों की जाँच नहीं करनी चाहिए, क्योंकि ऐसे संदेशों में सभी अटैचमेंट हमेशा सामान्य अटैचमेंट होते हैं।
  • HTML बॉडी: HTML बॉडी वाले संदेशों के लिए, अटैचमेंट में केवल PR_ATTACH_FLAGS (0x37140003) प्रॉपर्टी नहीं होनी चाहिए, बल्कि इनलाइन अटैचमेंट्स के लिए इसका मान 0x00000004 होना चाहिए। यदि यह शर्त पूरी होती है, तो अटैचमेंट की प्रकृति निर्धारित करने के लिए PR_ATTACH_CONTENT_LOCATION और PR_ATTACH_CONTENT_ID टैग पर निर्भर करता है। हालांकि, PR_ATTACH_FLAGS MAPI टैग की अनुपस्थिति में, अटैचमेंट को PR_ATTACH_DISPOSITION (0x3716001F या 0x3716001E) प्रॉपर्टी के अनुसार जांचा जाता है ताकि अटैचमेंट प्रकार निर्धारित किया जा सके।
  • RTF बॉडी: यदि बॉडी RTF है, तो सभी OLE अटैचमेंट्स इनलाइन अटैचमेंट्स होते हैं। सभी OLE अटैचमेंट्स के लिए PR_ATTACH_METHOD का मान 0x00000006 के बराबर होता है।

निम्नलिखित कोड नमूना प्रोग्रामेटिक रूप से इनलाइन और नियमित अटैचमेंट्स के बीच अंतर करता है। isInlineAttachment फ़ंक्शन एक अटैचमेंट और MapiMessage को इनपुट पैरामीटर के रूप में लेता है और true लौटाता है यदि अटैचमेंट इनलाइन अटैचमेंट है।

public static boolean isInlineAttachment(MapiAttachment att, MapiMessage msg) {
    if (msg.getBodyType() == BodyContentType.PlainText)
        // ignore indications for plain text messages
        return false;
    else if (msg.getBodyType() == BodyContentType.Html) {
        // check the PidTagAttachFlags property
        Long attachFlagsValue = att.getPropertyLong(MapiPropertyTag.PR_ATTACH_FLAGS);
        if (attachFlagsValue != null && (attachFlagsValue > 3 || attachFlagsValue < 1)) {
            // check PidTagAttachContentId property
            String contentId = att.getProperties().containsKey(MapiPropertyTag.PR_ATTACH_CONTENT_ID)
                    ? att.getPropertyString(MapiPropertyTag.PR_ATTACH_CONTENT_ID)
                    : att.getPropertyString(MapiPropertyTag.PR_ATTACH_CONTENT_ID_W);
            if (contentId != null && !contentId.isEmpty() && msg.getBodyHtml().contains("cid:" + contentId)) {
                return true;
            }
            // check PidTagAttachContentLocation property
            String contentLocation = att.getProperties().containsKey(MapiPropertyTag.PR_ATTACH_CONTENT_LOCATION)
                    ? att.getPropertyString(MapiPropertyTag.PR_ATTACH_CONTENT_LOCATION)
                    : att.getPropertyString(MapiPropertyTag.PR_ATTACH_CONTENT_LOCATION_W);
            if (contentLocation != null && !contentLocation.isEmpty() && msg.getBodyHtml().contains(contentLocation)) {
                return true;
            }
        }
        return "inline".equals(att.getPropertyString(0x3716001F)) || "inline".equals(att.getPropertyString(0x3716001E));
    } else if (msg.getBodyType() == BodyContentType.Rtf) {
        // If the body is RTF, then all OLE attachments are inline attachments.
        // OLE attachments have 0x00000006 for the value of the PidTagAttachMethod property
        Long attachMethod = att.getPropertyLong(MapiPropertyTag.PR_ATTACH_METHOD);
        return attachMethod != null && attachMethod == 0x00000006;
    } else {
        throw new ArgumentOutOfRangeException();
    }
}

यह कोड स्निपेट isInlineAttachment() फ़ंक्शन का उपयोग करके अटैचमेंट्स का मूल्यांकन करता है।

Java

String fileName = ("Sample.msg");
MapiMessage message = MapiMessage.fromFile(fileName);
MapiAttachmentCollection attachments = message.getAttachments();
for (int i = 0; i < attachments.size(); i++) {
    MapiAttachment attachment = (MapiAttachment) attachments.get(i);
    if (isInlineAttachment(attachment, message)) {
        System.out.println(attachment.getLongFileName() + " is inline attachment");
    } else {
        System.out.println(attachment.getLongFileName() + " is regular attachment");
    }
}