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