Sample code for 30+ languages & platforms
Java

Iterate MIME Parts of an Email

See more Email Object Examples

Demonstrates how to iterate over the MIME sub-parts of an email, and retrieve the content of each MIME sub-part body.

Note: This example requires some new features added to Chilkat v9.5.0.95.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Email;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example assumes the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // See the following Chilkat post to Quickly Understand Email MIME

        Email email = new Email();

        try {
            email.loadEml("qa_data/eml/sample.eml");
        } catch (ChilkatException e) {
            System.out.println("Failed to load .eml");
            return;
        }

        StringBuilder sbContentType = new StringBuilder();
        boolean caseSensitive = false;

        // Get the total number of non-multipart MIME sub-parts.
        // (This is a simple way of iterating over all the MIME leaf parts regardless of the MIME tree structure)
        boolean inlineOnly = false;
        boolean excludeAttachments = false;
        String searchSpec = "*/*";

        int numParts = email.getNumPartsOfType(searchSpec, inlineOnly, excludeAttachments);
        int i = 0;
        while (i < numParts) {
            // What is the Content-Type of this MIME part?
            sbContentType.append(email.getNthContentType(i, searchSpec, inlineOnly, excludeAttachments));
            if (sbContentType.startsWith("text/", caseSensitive)) {
                // Get the text body of this MIME part.
                String textBody = email.getNthTextPartOfType(i, searchSpec, inlineOnly, excludeAttachments);
                System.out.println("Got text body for " + sbContentType.getAsString());
            } else {
                if (sbContentType.contentsEqual("message/rfc822", caseSensitive)) {
                    // If the Content-Type is message/rfc822, then the MIME body for this part contains a full embedded MIME messages.
                    // Your application could load it into a Chilkat email object and recursively process...
                    Email attachedEmail = new Email();
                    BinData bdMime = new BinData();
                    email.getNthBinaryPartOfTypeBd(i, searchSpec, inlineOnly, excludeAttachments, bdMime);
                    attachedEmail.setFromMimeBd(bdMime);
                    // Now your app can recursively process the attachedEmail...
                } else {
                    // Get the bytes of this MIME body part.
                    BinData bd = new BinData();
                    email.getNthBinaryPartOfTypeBd(i, searchSpec, inlineOnly, excludeAttachments, bd);
                    System.out.println("Got binary body for " + sbContentType.getAsString() + " numBytes = " + bd.getNumBytes());
                }
            }

            sbContentType.clear();
            i = i + 1;
        }
    }
}