Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

POP3 Read S/MIME Encrypted Email

Read S/MIME encrypted email.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Email;
import com.chilkatsoft.chilkat2.EmailBundle;
import com.chilkatsoft.chilkat2.MailMan;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example assumes the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // The mailman object is used for receiving (POP3)
        // and sending (SMTP) email.
        MailMan mailman = new MailMan();

        // Set the POP3 server's hostname
        mailman.setMailHost("pop.example.com");

        // Set the POP3 login/password.
        mailman.setPopUsername("myLogin");
        mailman.setPopPassword("myPassword");

        // If running on Microsoft Windows, the Chilkat mailman
        // will automatically search the registry-based certificate stores
        // for matching certificates and private keys required for
        // decryption.  However, on Linux, MAX OS X, and other
        // operating systems, no such thing exists.  Therefore, you'll
        // need to specify one or more PFX (.p12 / .pfx) files as
        // sources for locating the certs required for decyrption.
        try {
            mailman.addPfxSourceFile("/pfxFiles/certs_and_keys_1.pfx", "pfxPassword1");

            mailman.addPfxSourceFile("/pfxFiles/certs_and_keys_2.pfx", "pfxPassword2");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // ...
        // Note: On MS Windows, it is not required to provide PFX sources
        // if the needed certs and private keys are already installed
        // on the system (in the registry-based certificate stores).

        // Copy the all email from the user's POP3 mailbox
        // into a bundle object.  The email remains on the server.
        EmailBundle bundle = new EmailBundle();
        boolean keepOnServer = true;
        boolean headersOnly = false;
        // Irrelevent because we are NOT downloading headers-only
        int numBodyLines = 0;
        try {
            mailman.fetchAll(keepOnServer, headersOnly, numBodyLines, bundle);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // S/MIME security envelopes are automatically "unwrapped"
        // when a message is retrieved from the server. Signed emails are automatically verified, and
        // encrypted emails are automatically decrypted, restoring the email to the original state before
        // signing and/or encrypting. Information about the signing and encrypting certificates can be
        // retrieved from the Email object (methods: GetSignedByCert, GetEncryptedByCert;
        // properties: SignedBy, EncryptedBy, SignaturesValid, Decrypted, ReceivedSigned,
        // ReceivedEncrypted).

        // Loop over the bundle
        Email email = new Email();
        int i = 0;
        while (i < bundle.getMessageCount()) {
            bundle.emailAt(i, email);

            System.out.println(email.getFrom());
            System.out.println(email.getSubject());

            // At this point, if the email was signed and/or encrypted, it is already "unwrapped", i.e.
            // the email is already decrypted and in a state as if it were never signed or encrypted.
            // You may check to see if the email was received encrypted or signed, and if so,
            // whether it was successfully unwrapped and who signed or encrypted it:
            if (email.getReceivedEncrypted()) {
                System.out.println("This email was encrypted when received.");
                if (email.getDecrypted()) {
                    System.out.println("This email was successfully decrypted.  It was encrypted by:");
                    System.out.println(email.getEncryptedBy());
                } else {
                    System.out.println("This email was not decrypted.");
                }
            }

            if (email.getReceivedSigned()) {
                System.out.println("This email was signed when received.");
                if (email.getSignaturesValid()) {
                    System.out.println("The signature was verified.  It was signed by:");
                    System.out.println(email.getSignedBy());
                } else {
                    System.out.println("The signature verification failed.");
                }
            }

            // The email's body, HTML body, attachments, etc.
            // are decrypted and available just like any non-encrypted email.

            System.out.println("--");

            i = i + 1;
        }
    }
}