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
(Perl) 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.
use chilkat(); # 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::CkMime->new(); $success = $mime->LoadMimeFile($emlPath); if ($success != 1) { print $mime->lastErrorText() . "\r\n"; exit; } print "---- MIME structure ----" . "\r\n"; print $mime->getStructure("text") . "\r\n"; print "------------------------" . "\r\n"; $email = chilkat::CkEmail->new(); $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->get_ReceivedSigned() . "\r\n"; print "Email was Encrypted: " . $email->get_ReceivedEncrypted() . "\r\n"; if ($email->get_ReceivedSigned() == 1) { print "Signature(s) valid = " . $email->get_SignaturesValid() . "\r\n"; } if ($email->get_ReceivedEncrypted() == 1) { print "Decrypted successfully = " . $email->get_Decrypted() . "\r\n"; } $i = 0; $numAttach = $email->get_NumAttachments(); print "Number of attachments = " . $numAttach . "\r\n"; while ($i < $numAttach) { print "---- Attachment " . $i . "\r\n"; # Examine the filename (if any) print "filename: " . $email->getAttachmentFilename($i) . "\r\n"; # Examine the content-ID (if any) print "Content-ID: " . $email->getAttachmentContentID($i) . "\r\n"; # Examine the content-type print "Content-Type: " . $email->getAttachmentContentType($i) . "\r\n"; # Examine the content-disposition print "Content-Disposition" . $email->getAttachmentHeader($i,"content-disposition") . "\r\n"; # Examine the attachment size: print "Size (in bytes) of the attachment: " . $email->GetAttachmentSize($i) . "\r\n"; $i = $i + 1; } print "--" . "\r\n"; # 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->get_NumRelatedItems(); print "Number of related items = " . $numRelated . "\r\n"; $i = 0; while ($i < $numRelated) { print "---- Related Item " . $i . "\r\n"; # Examine the filename (if any) print "filename: " . $email->getRelatedFilename($i) . "\r\n"; # Examine the content-ID (if any) print "Content-ID: " . $email->getRelatedContentID($i) . "\r\n"; # Examine the content-type print "Content-Type: " . $email->getRelatedContentType($i) . "\r\n"; # Examine the content-location (if any) print "Content-Location" . $email->getRelatedContentLocation($i) . "\r\n"; $i = $i + 1; } # The email could also have attached messages. # An attached message is another email that was attached to this email. $numAttachedMessages = $email->get_NumAttachedMessages(); print "Number of attached messages = " . $numAttachedMessages . "\r\n"; $i = 0; while ($i < $numAttachedMessages) { print "---- Attached message " . $i . "\r\n"; # Examine the attached email # em is a Email $em = $email->GetAttachedMessage($i); print "from: " . $em->ck_from() . "\r\n"; print "subject: " . $em->subject() . "\r\n"; $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->get_NumReports(); $i = 0; print "Number of reports = " . $numReports . "\r\n"; $i = 0; while ($i < $numReports) { print "---- Report " . $i . "\r\n"; # Get the raw report data... print $email->getReport($i) . "\r\n"; $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() == 1) { print "--- Delivery Status Information:" . "\r\n"; print "Status: " . $email->getDeliveryStatusInfo("Status") . "\r\n"; print "Action: " . $email->getDeliveryStatusInfo("Action") . "\r\n"; print "Reporting-MTA: " . $email->getDeliveryStatusInfo("Reporting-MTA") . "\r\n"; # sa is a StringArray $sa = $email->GetDsnFinalRecipients(); $numFinalRecipients = $sa->get_Count(); $i = 0; while ($i < $numFinalRecipients) { print "final recipient: " . $sa->getString($i) . "\r\n"; $i = $i + 1; } } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.