PHP ActiveX
PHP ActiveX
Load .eml and Examine the Structure, Attachments, and Related Items
See more Email Object Examples
Demonstrates 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.Chilkat PHP ActiveX Downloads
<?php
$success = 0;
// 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 = new COM("Chilkat.Mime");
$success = $mime->LoadMimeFile($emlPath);
if ($success == 0) {
print $mime->LastErrorText . "\n";
exit;
}
print '---- MIME structure ----' . "\n";
print $mime->getStructure('text') . "\n";
print '------------------------' . "\n";
$email = new COM("Chilkat.Email");
$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 . "\n";
print 'Email was Encrypted: ' . $email->ReceivedEncrypted . "\n";
if ($email->ReceivedSigned == 1) {
print 'Signature(s) valid = ' . $email->SignaturesValid . "\n";
}
if ($email->ReceivedEncrypted == 1) {
print 'Decrypted successfully = ' . $email->Decrypted . "\n";
}
$i = 0;
$numAttach = $email->NumAttachments;
print 'Number of attachments = ' . $numAttach . "\n";
while ($i < $numAttach) {
print '---- Attachment ' . $i . "\n";
// Examine the filename (if any)
print 'filename: ' . $email->getAttachmentFilename($i) . "\n";
// Examine the content-ID (if any)
print 'Content-ID: ' . $email->getAttachmentContentID($i) . "\n";
// Examine the content-type
print 'Content-Type: ' . $email->getAttachmentContentType($i) . "\n";
// Examine the content-disposition
print 'Content-Disposition' . $email->getAttachmentHeader($i,'content-disposition') . "\n";
// Examine the attachment size:
print 'Size (in bytes) of the attachment: ' . $email->GetAttachmentSize($i) . "\n";
$i = $i + 1;
}
print '--' . "\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->NumRelatedItems;
print 'Number of related items = ' . $numRelated . "\n";
$i = 0;
while ($i < $numRelated) {
print '---- Related Item ' . $i . "\n";
// Examine the filename (if any)
print 'filename: ' . $email->getRelatedFilename($i) . "\n";
// Examine the content-ID (if any)
print 'Content-ID: ' . $email->getRelatedContentID($i) . "\n";
// Examine the content-type
print 'Content-Type: ' . $email->getRelatedContentType($i) . "\n";
// Examine the content-location (if any)
print 'Content-Location' . $email->getRelatedContentLocation($i) . "\n";
$i = $i + 1;
}
// The email could also have attached messages.
// An attached message is another email that was attached to this email.
$em = new COM("Chilkat.Email");
$numAttachedMessages = $email->NumAttachedMessages;
print 'Number of attached messages = ' . $numAttachedMessages . "\n";
$i = 0;
while ($i < $numAttachedMessages) {
print '---- Attached message ' . $i . "\n";
// Examine the attached email
$email->GetAttachedEmail($i,$em);
print 'from: ' . $em->From . "\n";
print 'subject: ' . $em->Subject . "\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->NumReports;
print 'Number of reports = ' . $numReports . "\n";
$i = 0;
while ($i < $numReports) {
print '---- Report ' . $i . "\n";
// Get the raw report data...
print $email->getReport($i) . "\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:' . "\n";
print 'Status: ' . $email->getDeliveryStatusInfo('Status') . "\n";
print 'Action: ' . $email->getDeliveryStatusInfo('Action') . "\n";
print 'Reporting-MTA: ' . $email->getDeliveryStatusInfo('Reporting-MTA') . "\n";
$jsonDsnInfo = new COM("Chilkat.JsonObject");
$email->GetDsnInfo($jsonDsnInfo);
$jsonDsnInfo->EmitCompact = 0;
print $jsonDsnInfo->emit() . "\n";
}
?>