Sample code for 30+ languages & platforms
Go

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 Go Downloads

Go
    success := false

    // 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 := chilkat.NewEmail()

    success = email.LoadEml("qa_data/eml/sample.eml")
    if success == false {
        fmt.Println("Failed to load .eml")
        email.DisposeEmail()
        return
    }

    sbContentType := chilkat.NewStringBuilder()
    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)
    inlineOnly := false
    excludeAttachments := false
    searchSpec := "*/*"

    numParts := email.GetNumPartsOfType(searchSpec,inlineOnly,excludeAttachments)
    i := 0
    for i < numParts {
        // What is the Content-Type of this MIME part?
        sbContentType.Append(*email.GetNthContentType(i,searchSpec,inlineOnly,excludeAttachments))
        if sbContentType.StartsWith("text/",caseSensitive) == true {
            // Get the text body of this MIME part.
            textBody := email.GetNthTextPartOfType(i,searchSpec,inlineOnly,excludeAttachments)
            fmt.Println("Got text body for ", *sbContentType.GetAsString())
        } else {
            if sbContentType.ContentsEqual("message/rfc822",caseSensitive) == true {
                // 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...
                attachedEmail := chilkat.NewEmail()
                bdMime := chilkat.NewBinData()
                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.
                bd := chilkat.NewBinData()
                email.GetNthBinaryPartOfTypeBd(i,searchSpec,inlineOnly,excludeAttachments,bd)
                fmt.Println("Got binary body for ", *sbContentType.GetAsString(), " numBytes = ", bd.NumBytes())
            }

        }

        sbContentType.Clear()
        i = i + 1
    }


    email.DisposeEmail()
    sbContentType.DisposeStringBuilder()
    attachedEmail.DisposeEmail()
    bdMime.DisposeBinData()
    bd.DisposeBinData()