Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Swift 2) Load .eml and Examine the Structure, Attachments, and Related ItemsDemonstrates how to load examine the MIME structure of a .eml, and also examine the attachment and related item filenames, attached messages, and multipart/report and DSN information.
func chilkatTest() { // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. var emlPath: String? = "C:/AAWorkarea/beatrix/roesner.eml" let mime = CkoMime() var success: Bool = mime.LoadMimeFile(emlPath) if success != true { print("\(mime.LastErrorText)") return } print("---- MIME structure ----") print("\(mime.GetStructure("text"))") print("------------------------") let email = CkoEmail() success = email.LoadEml(emlPath) // Was this a signed and/or encrypted email? // If so, then loading the .eml automatically unwraps // (i.e. verifies signatures and decrypts) and the resultant // email is what existed prior to signing/encrypting. print("Email was Signed: \(email.ReceivedSigned)") print("Email was Encrypted: \(email.ReceivedEncrypted)") if email.ReceivedSigned == true { print("Signature(s) valid = \(email.SignaturesValid)") } if email.ReceivedEncrypted == true { print("Decrypted successfully = \(email.Decrypted)") } var i: Int = 0 var numAttach: Int = email.NumAttachments.intValue print("Number of attachments = \(numAttach)") while i < numAttach { print("---- Attachment \(i)") // Examine the filename (if any) print("filename: \(email.GetAttachmentFilename(i))") // Examine the content-ID (if any) print("Content-ID: \(email.GetAttachmentContentID(i))") // Examine the content-type print("Content-Type: \(email.GetAttachmentContentType(i))") // Examine the content-disposition print("Content-Disposition\(email.GetAttachmentHeader(i, fieldName: "content-disposition"))") // Examine the attachment size: print("Size (in bytes) of the attachment: \(email.GetAttachmentSize(i).intValue)") i = i + 1 } print("--") // Now for the related items. // Note: A MIME sub-part can potentially be both a related item AND an attachment. // The typical case is when the item is contained under the multipart/related enclosure and // the item also has a "Content-Disposition" header indicating "attachment". // The location within multipart/related makes it a "related item", yet the Content-Disposition can also make it semantically an attachment. // Related items and attachments are not necessarily mutually exclusive. var numRelated: Int = email.NumRelatedItems.intValue print("Number of related items = \(numRelated)") i = 0 while i < numRelated { print("---- Related Item \(i)") // Examine the filename (if any) print("filename: \(email.GetRelatedFilename(i))") // Examine the content-ID (if any) print("Content-ID: \(email.GetRelatedContentID(i))") // Examine the content-type print("Content-Type: \(email.GetRelatedContentType(i))") // Examine the content-location (if any) print("Content-Location\(email.GetRelatedContentLocation(i))") i = i + 1 } // The email could also have attached messages. // An attached message is another email that was attached to this email. var numAttachedMessages: Int = email.NumAttachedMessages.intValue print("Number of attached messages = \(numAttachedMessages)") i = 0 while i < numAttachedMessages { print("---- Attached message \(i)") // Examine the attached email var em: CkoEmail? = email.GetAttachedMessage(i) print("from: \(em!.From)") print("subject: \(em!.Subject)") em = nil i = i + 1 } // An email could also be a multipart/report email. // This is a DSN (Delivery Status Notification) // The NumReports property indicates how many "reports" exist. var numReports: Int = email.NumReports.intValue i = 0 print("Number of reports = \(numReports)") i = 0 while i < numReports { print("---- Report \(i)") // Get the raw report data... print("\(email.GetReport(i))") i = i + 1 } // If the email is a multipart/report, then the information // from the message/delivery-status part of the email can be retrieved: if email.IsMultipartReport() == true { print("--- Delivery Status Information:") print("Status: \(email.GetDeliveryStatusInfo("Status"))") print("Action: \(email.GetDeliveryStatusInfo("Action"))") print("Reporting-MTA: \(email.GetDeliveryStatusInfo("Reporting-MTA"))") var sa: CkoStringArray? = email.GetDsnFinalRecipients() var numFinalRecipients: Int = sa!.Count.intValue i = 0 while i < numFinalRecipients { print("final recipient: \(sa!.GetString(i))") i = i + 1 } sa = nil } } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.