Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loEmail
LOCAL loSbContentType
LOCAL lnCaseSensitive
LOCAL lnInlineOnly
LOCAL lnExcludeAttachments
LOCAL lcSearchSpec
LOCAL lnNumParts
LOCAL i
LOCAL lcTextBody
LOCAL loAttachedEmail
LOCAL loBdMime
LOCAL loBd

lnSuccess = 0

* 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

loEmail = CreateObject('Chilkat.Email')

lnSuccess = loEmail.LoadEml("qa_data/eml/sample.eml")
IF (lnSuccess = 0) THEN
    ? "Failed to load .eml"
    RELEASE loEmail
    CANCEL
ENDIF

loSbContentType = CreateObject('Chilkat.StringBuilder')
lnCaseSensitive = 0

* 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)
lnInlineOnly = 0
lnExcludeAttachments = 0
lcSearchSpec = "*/*"

lnNumParts = loEmail.GetNumPartsOfType(lcSearchSpec,lnInlineOnly,lnExcludeAttachments)
i = 0
DO WHILE i < lnNumParts
    * What is the Content-Type of this MIME part?
    loSbContentType.Append(loEmail.GetNthContentType(i,lcSearchSpec,lnInlineOnly,lnExcludeAttachments))
    IF (loSbContentType.StartsWith("text/",lnCaseSensitive) = 1) THEN
        * Get the text body of this MIME part.
        lcTextBody = loEmail.GetNthTextPartOfType(i,lcSearchSpec,lnInlineOnly,lnExcludeAttachments)
        ? "Got text body for " + loSbContentType.GetAsString()
    ELSE
        IF (loSbContentType.ContentsEqual("message/rfc822",lnCaseSensitive) = 1) THEN
            * 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...
            loAttachedEmail = CreateObject('Chilkat.Email')
            loBdMime = CreateObject('Chilkat.BinData')
            loEmail.GetNthBinaryPartOfTypeBd(i,lcSearchSpec,lnInlineOnly,lnExcludeAttachments,loBdMime)
            loAttachedEmail.SetFromMimeBd(loBdMime)
            * Now your app can recursively process the attachedEmail...
        ELSE
            * Get the bytes of this MIME body part.
            loBd = CreateObject('Chilkat.BinData')
            loEmail.GetNthBinaryPartOfTypeBd(i,lcSearchSpec,lnInlineOnly,lnExcludeAttachments,loBd)
            ? "Got binary body for " + loSbContentType.GetAsString() + " numBytes = " + STR(loBd.NumBytes)
        ENDIF

    ENDIF

    loSbContentType.Clear()
    i = i + 1
ENDDO

RELEASE loEmail
RELEASE loSbContentType
RELEASE loAttachedEmail
RELEASE loBdMime
RELEASE loBd