AutoIt
AutoIt
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 AutoIt Downloads
Local $bSuccess = False
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
Local $sEmlPath = "C:/AAWorkarea/beatrix/roesner.eml"
$oMime = ObjCreate("Chilkat.Mime")
$bSuccess = $oMime.LoadMimeFile($sEmlPath)
If ($bSuccess = False) Then
ConsoleWrite($oMime.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("---- MIME structure ----" & @CRLF)
ConsoleWrite($oMime.GetStructure("text") & @CRLF)
ConsoleWrite("------------------------" & @CRLF)
$oEmail = ObjCreate("Chilkat.Email")
$bSuccess = $oEmail.LoadEml($sEmlPath)
; 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.
ConsoleWrite("Email was Signed: " & $oEmail.ReceivedSigned & @CRLF)
ConsoleWrite("Email was Encrypted: " & $oEmail.ReceivedEncrypted & @CRLF)
If ($oEmail.ReceivedSigned = True) Then
ConsoleWrite("Signature(s) valid = " & $oEmail.SignaturesValid & @CRLF)
EndIf
If ($oEmail.ReceivedEncrypted = True) Then
ConsoleWrite("Decrypted successfully = " & $oEmail.Decrypted & @CRLF)
EndIf
Local $i = 0
Local $iNumAttach = $oEmail.NumAttachments
ConsoleWrite("Number of attachments = " & $iNumAttach & @CRLF)
While $i < $iNumAttach
ConsoleWrite("---- Attachment " & $i & @CRLF)
; Examine the filename (if any)
ConsoleWrite("filename: " & $oEmail.GetAttachmentFilename($i) & @CRLF)
; Examine the content-ID (if any)
ConsoleWrite("Content-ID: " & $oEmail.GetAttachmentContentID($i) & @CRLF)
; Examine the content-type
ConsoleWrite("Content-Type: " & $oEmail.GetAttachmentContentType($i) & @CRLF)
; Examine the content-disposition
ConsoleWrite("Content-Disposition" & $oEmail.GetAttachmentHeader($i,"content-disposition") & @CRLF)
; Examine the attachment size:
ConsoleWrite("Size (in bytes) of the attachment: " & $oEmail.GetAttachmentSize($i) & @CRLF)
$i = $i + 1
Wend
ConsoleWrite("--" & @CRLF)
; 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.
Local $iNumRelated = $oEmail.NumRelatedItems
ConsoleWrite("Number of related items = " & $iNumRelated & @CRLF)
$i = 0
While $i < $iNumRelated
ConsoleWrite("---- Related Item " & $i & @CRLF)
; Examine the filename (if any)
ConsoleWrite("filename: " & $oEmail.GetRelatedFilename($i) & @CRLF)
; Examine the content-ID (if any)
ConsoleWrite("Content-ID: " & $oEmail.GetRelatedContentID($i) & @CRLF)
; Examine the content-type
ConsoleWrite("Content-Type: " & $oEmail.GetRelatedContentType($i) & @CRLF)
; Examine the content-location (if any)
ConsoleWrite("Content-Location" & $oEmail.GetRelatedContentLocation($i) & @CRLF)
$i = $i + 1
Wend
; The email could also have attached messages.
; An attached message is another email that was attached to this email.
$oEm = ObjCreate("Chilkat.Email")
Local $iNumAttachedMessages = $oEmail.NumAttachedMessages
ConsoleWrite("Number of attached messages = " & $iNumAttachedMessages & @CRLF)
$i = 0
While $i < $iNumAttachedMessages
ConsoleWrite("---- Attached message " & $i & @CRLF)
; Examine the attached email
$oEmail.GetAttachedEmail($i,$oEm)
ConsoleWrite("from: " & $oEm.From & @CRLF)
ConsoleWrite("subject: " & $oEm.Subject & @CRLF)
$i = $i + 1
Wend
; An email could also be a multipart/report email.
; This is a DSN (Delivery Status Notification)
; The NumReports property indicates how many "reports" exist.
Local $iNumReports = $oEmail.NumReports
ConsoleWrite("Number of reports = " & $iNumReports & @CRLF)
$i = 0
While $i < $iNumReports
ConsoleWrite("---- Report " & $i & @CRLF)
; Get the raw report data...
ConsoleWrite($oEmail.GetReport($i) & @CRLF)
$i = $i + 1
Wend
; If the email is a multipart/report, then the information
; from the message/delivery-status part of the email can be retrieved:
If ($oEmail.IsMultipartReport() = True) Then
ConsoleWrite("--- Delivery Status Information:" & @CRLF)
ConsoleWrite("Status: " & $oEmail.GetDeliveryStatusInfo("Status") & @CRLF)
ConsoleWrite("Action: " & $oEmail.GetDeliveryStatusInfo("Action") & @CRLF)
ConsoleWrite("Reporting-MTA: " & $oEmail.GetDeliveryStatusInfo("Reporting-MTA") & @CRLF)
$oJsonDsnInfo = ObjCreate("Chilkat.JsonObject")
$oEmail.GetDsnInfo($oJsonDsnInfo)
$oJsonDsnInfo.EmitCompact = False
ConsoleWrite($oJsonDsnInfo.Emit() & @CRLF)
EndIf