Swift
Swift
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 Swift Downloads
func chilkatTest() {
var success: Bool = 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
let email = CkoEmail()!
success = email.loadEml(mimePath: "qa_data/eml/sample.eml")
if success == false {
print("Failed to load .eml")
return
}
let sbContentType = CkoStringBuilder()!
var caseSensitive: Bool = 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)
var inlineOnly: Bool = false
var excludeAttachments: Bool = false
var searchSpec: String? = "*/*"
var numParts: Int = email.getNumParts(ofType: searchSpec, inlineOnly: inlineOnly, excludeAttachments: excludeAttachments).intValue
var i: Int = 0
while i < numParts {
// What is the Content-Type of this MIME part?
sbContentType.append(value: email.getNthContentType(index: i, contentType: searchSpec, inlineOnly: inlineOnly, excludeAttachments: excludeAttachments))
if sbContentType.starts(with: "text/", caseSensitive: caseSensitive) == true {
// Get the text body of this MIME part.
var textBody: String? = email.getNthTextPart(ofType: i, contentType: searchSpec, inlineOnly: inlineOnly, excludeAttachments: excludeAttachments)
print("Got text body for \(sbContentType.getAsString()!)")
}
else {
if sbContentType.contentsEqual(str: "message/rfc822", caseSensitive: 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...
let attachedEmail = CkoEmail()!
let bdMime = CkoBinData()!
email.getNthBinaryPart(ofTypeBd: i, contentType: searchSpec, inlineOnly: inlineOnly, excludeAttachments: excludeAttachments, bd: bdMime)
attachedEmail.set(fromMimeBd: bdMime)
// Now your app can recursively process the attachedEmail...
}
else {
// Get the bytes of this MIME body part.
let bd = CkoBinData()!
email.getNthBinaryPart(ofTypeBd: i, contentType: searchSpec, inlineOnly: inlineOnly, excludeAttachments: excludeAttachments, bd: bd)
print("Got binary body for \(sbContentType.getAsString()!) numBytes = \(bd.numBytes.intValue)")
}
}
sbContentType.clear()
i = i + 1
}
}