Lianja
Lianja
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 Lianja Downloads
llSuccess = .F.
// 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("CkEmail")
llSuccess = loEmail.LoadEml("qa_data/eml/sample.eml")
if (llSuccess = .F.) then
? "Failed to load .eml"
release loEmail
return
endif
loSbContentType = createobject("CkStringBuilder")
llCaseSensitive = .F.
// 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)
llInlineOnly = .F.
llExcludeAttachments = .F.
lcSearchSpec = "*/*"
lnNumParts = loEmail.GetNumPartsOfType(lcSearchSpec,llInlineOnly,llExcludeAttachments)
i = 0
do while i < lnNumParts
// What is the Content-Type of this MIME part?
loSbContentType.Append(loEmail.GetNthContentType(i,lcSearchSpec,llInlineOnly,llExcludeAttachments))
if (loSbContentType.StartsWith("text/",llCaseSensitive) = .T.) then
// Get the text body of this MIME part.
lcTextBody = loEmail.GetNthTextPartOfType(i,lcSearchSpec,llInlineOnly,llExcludeAttachments)
? "Got text body for " + loSbContentType.GetAsString()
else
if (loSbContentType.ContentsEqual("message/rfc822",llCaseSensitive) = .T.) 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("CkEmail")
loBdMime = createobject("CkBinData")
loEmail.GetNthBinaryPartOfTypeBd(i,lcSearchSpec,llInlineOnly,llExcludeAttachments,loBdMime)
loAttachedEmail.SetFromMimeBd(loBdMime)
// Now your app can recursively process the attachedEmail...
else
// Get the bytes of this MIME body part.
loBd = createobject("CkBinData")
loEmail.GetNthBinaryPartOfTypeBd(i,lcSearchSpec,llInlineOnly,llExcludeAttachments,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