Go
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
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()