Sample code for 30+ languages & platforms
C#

IMAP Read PEC Email of Aruba and Extract the Invoice XML Files

See more Email Object Examples

IMAP Read PEC Email of Aruba and Extract the Invoice XML Files.

Chilkat C# Downloads

C#
bool success = false;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

Chilkat.Imap imap = new Chilkat.Imap();

//  Connect using TLS.
imap.Ssl = true;
imap.Port = 993;
success = imap.Connect("imap.example.com");
if (success == false) {
    Debug.WriteLine(imap.LastErrorText);
    return;
}

//  Authenticate
success = imap.Login("email_account_login","email_account_password");
if (success == false) {
    Debug.WriteLine(imap.LastErrorText);
    return;
}

//  Select an IMAP mailbox
success = imap.SelectMailbox("Inbox/postacert");
if (success == false) {
    Debug.WriteLine(imap.LastErrorText);
    return;
}

//  Search for messages having "POSTA CERTIFICATA: Invio File" in the subject.
bool fetchUids = true;
Chilkat.MessageSet messageSet = new Chilkat.MessageSet();
success = imap.QueryMbx("SUBJECT \"POSTA CERTIFICATA: Invio File\"",fetchUids,messageSet);
if (success == false) {
    Debug.WriteLine(imap.LastErrorText);
    return;
}

if (messageSet.Count < 1) {
    Debug.WriteLine("No messages found.");
    return;
}

//  For our example, we'll process only the 1st email in the messageSet.
//  Download the MIME source of the email into a StringBuilder object.
Chilkat.Email email = new Chilkat.Email();
success = imap.FetchEmail(false,messageSet.GetId(0),messageSet.HasUids,email);
if (success == false) {
    Debug.WriteLine(imap.LastErrorText);
    return;
}

//  The email should contain an attached email.
//  The Invoice XML is contained within the attached email.
Chilkat.Email attachedEmail = new Chilkat.Email();
success = email.GetAttachedEmail(0,attachedEmail);
if (success == false) {
    Debug.WriteLine(email.LastErrorText);
    return;
}

//  Get the MIME of the attached email..
Chilkat.StringBuilder sbMime = new Chilkat.StringBuilder();
success = attachedEmail.GetMimeSb(sbMime);

//  Load it into a Chilkat MIME object.
Chilkat.Mime mime = new Chilkat.Mime();
success = mime.LoadMimeSb(sbMime);

//  Examine the structure of the MIME.
Debug.WriteLine(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
Chilkat.BinData bdP7m = new Chilkat.BinData();
//  Get the 2nd sub-part, at index 1 because index 0 is the 1st sub-part.

Chilkat.Mime mimeP7m = new Chilkat.Mime();
success = mime.PartAt(1,mimeP7m);
if (success == false) {
    Debug.WriteLine(mime.LastErrorText);
    return;
}

if (mime.LastMethodSuccess != true) {
    Debug.WriteLine("Failed to get 2nd sub-part. Perhaps the MIME does not have a 2nd sub-part?");
    return;
}

success = mimeP7m.GetBodyBd(bdP7m);

//  Verify the signature, which also extracts the content contained within the opaque signature.
Chilkat.Crypt2 crypt = new Chilkat.Crypt2();
success = crypt.OpaqueVerifyBd(bdP7m);
if (success == false) {
    Debug.WriteLine(crypt.LastErrorText);
    return;
}

//  The bdP7m now contains the Invoice XML.
//  Load it into an XML object.
Chilkat.Xml xml = new Chilkat.Xml();
success = xml.LoadBd(bdP7m,true);

Debug.WriteLine(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

Debug.WriteLine("success.");