Android™
Android™
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 Android™ Downloads
// Important: Don't forget to include the call to System.loadLibrary
// as shown at the bottom of this code sample.
package com.test;
import android.app.Activity;
import com.chilkatsoft.*;
import android.widget.TextView;
import android.os.Bundle;
public class SimpleActivity extends Activity {
private static final String TAG = "Chilkat";
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean success = false;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkImap imap = new CkImap();
// Connect using TLS.
imap.put_Ssl(true);
imap.put_Port(993);
success = imap.Connect("imap.example.com");
if (success == false) {
Log.i(TAG, imap.lastErrorText());
return;
}
// Authenticate
success = imap.Login("email_account_login","email_account_password");
if (success == false) {
Log.i(TAG, imap.lastErrorText());
return;
}
// Select an IMAP mailbox
success = imap.SelectMailbox("Inbox/postacert");
if (success == false) {
Log.i(TAG, imap.lastErrorText());
return;
}
// Search for messages having "POSTA CERTIFICATA: Invio File" in the subject.
boolean fetchUids = true;
CkMessageSet messageSet = new CkMessageSet();
success = imap.QueryMbx("SUBJECT \"POSTA CERTIFICATA: Invio File\"",fetchUids,messageSet);
if (success == false) {
Log.i(TAG, imap.lastErrorText());
return;
}
if (messageSet.get_Count() < 1) {
Log.i(TAG, "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.
CkEmail email = new CkEmail();
success = imap.FetchEmail(false,messageSet.GetId(0),messageSet.get_HasUids(),email);
if (success == false) {
Log.i(TAG, imap.lastErrorText());
return;
}
// The email should contain an attached email.
// The Invoice XML is contained within the attached email.
CkEmail attachedEmail = new CkEmail();
success = email.GetAttachedEmail(0,attachedEmail);
if (success == false) {
Log.i(TAG, email.lastErrorText());
return;
}
// Get the MIME of the attached email..
CkStringBuilder sbMime = new CkStringBuilder();
success = attachedEmail.GetMimeSb(sbMime);
// Load it into a Chilkat MIME object.
CkMime mime = new CkMime();
success = mime.LoadMimeSb(sbMime);
// Examine the structure of the MIME.
Log.i(TAG, 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
CkBinData bdP7m = new CkBinData();
// Get the 2nd sub-part, at index 1 because index 0 is the 1st sub-part.
CkMime mimeP7m = new CkMime();
success = mime.PartAt(1,mimeP7m);
if (success == false) {
Log.i(TAG, mime.lastErrorText());
return;
}
if (mime.get_LastMethodSuccess() != true) {
Log.i(TAG, "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.
CkCrypt2 crypt = new CkCrypt2();
success = crypt.OpaqueVerifyBd(bdP7m);
if (success == false) {
Log.i(TAG, crypt.lastErrorText());
return;
}
// The bdP7m now contains the Invoice XML.
// Load it into an XML object.
CkXml xml = new CkXml();
success = xml.LoadBd(bdP7m,true);
Log.i(TAG, 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
Log.i(TAG, "success.");
}
static {
System.loadLibrary("chilkat");
// Note: If the incorrect library name is passed to System.loadLibrary,
// then you will see the following error message at application startup:
//"The application <your-application-name> has stopped unexpectedly. Please try again."
}
}