![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerBuilder) IMAP Read PEC Email of Aruba and Extract the Invoice XML FilesIMAP Read PEC Email of Aruba and Extract the Invoice XML Files. Note: This example requires Chilkat v11.0.0 or greater.
integer li_rc integer li_Success oleobject loo_Imap integer li_FetchUids oleobject loo_MessageSet oleobject loo_Email oleobject loo_AttachedEmail oleobject loo_SbMime oleobject loo_Mime oleobject loo_BdP7m oleobject loo_MimeP7m oleobject loo_Crypt oleobject loo_Xml li_Success = 0 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. loo_Imap = create oleobject li_rc = loo_Imap.ConnectToNewObject("Chilkat.Imap") if li_rc < 0 then destroy loo_Imap MessageBox("Error","Connecting to COM object failed") return end if // Connect using TLS. loo_Imap.Ssl = 1 loo_Imap.Port = 993 li_Success = loo_Imap.Connect("imap.example.com") if li_Success = 0 then Write-Debug loo_Imap.LastErrorText destroy loo_Imap return end if // Authenticate li_Success = loo_Imap.Login("email_account_login","email_account_password") if li_Success = 0 then Write-Debug loo_Imap.LastErrorText destroy loo_Imap return end if // Select an IMAP mailbox li_Success = loo_Imap.SelectMailbox("Inbox/postacert") if li_Success = 0 then Write-Debug loo_Imap.LastErrorText destroy loo_Imap return end if // Search for messages having "POSTA CERTIFICATA: Invio File" in the subject. li_FetchUids = 1 loo_MessageSet = create oleobject li_rc = loo_MessageSet.ConnectToNewObject("Chilkat.MessageSet") li_Success = loo_Imap.QueryMbx("SUBJECT ~"POSTA CERTIFICATA: Invio File~"",li_FetchUids,loo_MessageSet) if li_Success = 0 then Write-Debug loo_Imap.LastErrorText destroy loo_Imap destroy loo_MessageSet return end if if loo_MessageSet.Count < 1 then Write-Debug "No messages found." destroy loo_Imap destroy loo_MessageSet return end if // For our example, we'll process only the 1st email in the messageSet. // Download the MIME source of the email into a StringBuilder object. loo_Email = create oleobject li_rc = loo_Email.ConnectToNewObject("Chilkat.Email") li_Success = loo_Imap.FetchEmail(0,loo_MessageSet.GetId(0),loo_MessageSet.HasUids,loo_Email) if li_Success = 0 then Write-Debug loo_Imap.LastErrorText destroy loo_Imap destroy loo_MessageSet destroy loo_Email return end if // The email should contain an attached email. // The Invoice XML is contained within the attached email. loo_AttachedEmail = create oleobject li_rc = loo_AttachedEmail.ConnectToNewObject("Chilkat.Email") li_Success = loo_Email.GetAttachedEmail(0,loo_AttachedEmail) if li_Success = 0 then Write-Debug loo_Email.LastErrorText destroy loo_Imap destroy loo_MessageSet destroy loo_Email destroy loo_AttachedEmail return end if // Get the MIME of the attached email.. loo_SbMime = create oleobject li_rc = loo_SbMime.ConnectToNewObject("Chilkat.StringBuilder") li_Success = loo_AttachedEmail.GetMimeSb(loo_SbMime) // Load it into a Chilkat MIME object. loo_Mime = create oleobject li_rc = loo_Mime.ConnectToNewObject("Chilkat.Mime") li_Success = loo_Mime.LoadMimeSb(loo_SbMime) // Examine the structure of the MIME. Write-Debug loo_Mime.GetStructure("text") // The MIME has this structure: // multipart/mixed // application/octet-stream // application/octet-stream <-- This is where the XML is contained. It is within an opaque signature. // text/plain // The 2nd application/octet-stream MIME header looks like this: // ------=_Part_329673_-1348225228.1579889273592 // Content-Type: application/octet-stream; name="SM99999_99aaa.xml.p7m" // Content-Transfer-Encoding: base64 // Content-Disposition: attachment; filename="SM99999_99aaa.xml.p7m" // Let's get the binary content of the .p7m loo_BdP7m = create oleobject li_rc = loo_BdP7m.ConnectToNewObject("Chilkat.BinData") // Get the 2nd sub-part, at index 1 because index 0 is the 1st sub-part. loo_MimeP7m = create oleobject li_rc = loo_MimeP7m.ConnectToNewObject("Chilkat.Mime") li_Success = loo_Mime.PartAt(1,loo_MimeP7m) if li_Success = 0 then Write-Debug loo_Mime.LastErrorText destroy loo_Imap destroy loo_MessageSet destroy loo_Email destroy loo_AttachedEmail destroy loo_SbMime destroy loo_Mime destroy loo_BdP7m destroy loo_MimeP7m return end if if loo_Mime.LastMethodSuccess <> 1 then Write-Debug "Failed to get 2nd sub-part. Perhaps the MIME does not have a 2nd sub-part?" destroy loo_Imap destroy loo_MessageSet destroy loo_Email destroy loo_AttachedEmail destroy loo_SbMime destroy loo_Mime destroy loo_BdP7m destroy loo_MimeP7m return end if li_Success = loo_MimeP7m.GetBodyBd(loo_BdP7m) // Verify the signature, which also extracts the content contained within the opaque signature. loo_Crypt = create oleobject li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2") li_Success = loo_Crypt.OpaqueVerifyBd(loo_BdP7m) if li_Success = 0 then Write-Debug loo_Crypt.LastErrorText destroy loo_Imap destroy loo_MessageSet destroy loo_Email destroy loo_AttachedEmail destroy loo_SbMime destroy loo_Mime destroy loo_BdP7m destroy loo_MimeP7m destroy loo_Crypt return end if // The bdP7m now contains the Invoice XML. // Load it into an XML object. loo_Xml = create oleobject li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml") li_Success = loo_Xml.LoadBd(loo_BdP7m,1) Write-Debug loo_Xml.GetXml() // We have XML such as the following: // // <?xml version="1.0" encoding="windows-1252"?> // <?xml-stylesheet type="text/xsl" href="fatturapa_v1.2.xsl"?> // <p:FatturaElettronica versione="FPR12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" // xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" // xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> // <FatturaElettronicaHeader> // ... // </FatturaElettronicaHeader> // <FatturaElettronicaBody> // ... // </FatturaElettronicaBody> // </p:FatturaElettronica> // Use this online tool to generate parsing code from sample XML: // Generate Parsing Code from XML Write-Debug "success." destroy loo_Imap destroy loo_MessageSet destroy loo_Email destroy loo_AttachedEmail destroy loo_SbMime destroy loo_Mime destroy loo_BdP7m destroy loo_MimeP7m destroy loo_Crypt destroy loo_Xml |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.