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
(Go) 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.
// This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. emlPath := "C:/AAWorkarea/beatrix/roesner.eml" mime := chilkat.NewMime() success := mime.LoadMimeFile(emlPath) if success != true { fmt.Println(mime.LastErrorText()) mime.DisposeMime() return } fmt.Println("---- MIME structure ----") fmt.Println(*mime.GetStructure("text")) fmt.Println("------------------------") email := chilkat.NewEmail() 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. fmt.Println("Email was Signed: ", email.ReceivedSigned()) fmt.Println("Email was Encrypted: ", email.ReceivedEncrypted()) if email.ReceivedSigned() == true { fmt.Println("Signature(s) valid = ", email.SignaturesValid()) } if email.ReceivedEncrypted() == true { fmt.Println("Decrypted successfully = ", email.Decrypted()) } i := 0 numAttach := email.NumAttachments() fmt.Println("Number of attachments = ", numAttach) for i < numAttach { fmt.Println("---- Attachment ", i) // Examine the filename (if any) fmt.Println("filename: ", *email.GetAttachmentFilename(i)) // Examine the content-ID (if any) fmt.Println("Content-ID: ", *email.GetAttachmentContentID(i)) // Examine the content-type fmt.Println("Content-Type: ", *email.GetAttachmentContentType(i)) // Examine the content-disposition fmt.Println("Content-Disposition", *email.GetAttachmentHeader(i,"content-disposition")) // Examine the attachment size: fmt.Println("Size (in bytes) of the attachment: ", *email.GetAttachmentSize(i)) i = i + 1 } fmt.Println("--") // 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. numRelated := email.NumRelatedItems() fmt.Println("Number of related items = ", numRelated) i = 0 for i < numRelated { fmt.Println("---- Related Item ", i) // Examine the filename (if any) fmt.Println("filename: ", *email.GetRelatedFilename(i)) // Examine the content-ID (if any) fmt.Println("Content-ID: ", *email.GetRelatedContentID(i)) // Examine the content-type fmt.Println("Content-Type: ", *email.GetRelatedContentType(i)) // Examine the content-location (if any) fmt.Println("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. numAttachedMessages := email.NumAttachedMessages() fmt.Println("Number of attached messages = ", numAttachedMessages) i = 0 for i < numAttachedMessages { fmt.Println("---- Attached message ", i) // Examine the attached email em := email.GetAttachedMessage(i) fmt.Println("from: ", em.From()) fmt.Println("subject: ", em.Subject()) em.DisposeEmail() 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. numReports := email.NumReports() i = 0 fmt.Println("Number of reports = ", numReports) i = 0 for i < numReports { fmt.Println("---- Report ", i) // Get the raw report data... fmt.Println(*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 { fmt.Println("--- Delivery Status Information:") fmt.Println("Status: ", *email.GetDeliveryStatusInfo("Status")) fmt.Println("Action: ", *email.GetDeliveryStatusInfo("Action")) fmt.Println("Reporting-MTA: ", *email.GetDeliveryStatusInfo("Reporting-MTA")) sa := email.GetDsnFinalRecipients() numFinalRecipients := sa.Count() i = 0 for i < numFinalRecipients { fmt.Println("final recipient: ", *sa.GetString(i)) i = i + 1 } sa.DisposeStringArray() } mime.DisposeMime() email.DisposeEmail() |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.