Sample code for 30+ languages & platforms
Java Requires Chilkat v10.1.2+

Send Signed Email using PFX File (long version)

Demonstrates how to send a signed email using a digital certificate w/ private key stored in a PFX file.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.Cert;
import com.chilkatsoft.chilkat2.CertStore;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Email;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.MailMan;

public class ChilkatExample {

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

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

        // Set the SMTP server.
        mailman.setSmtpHost("smtp.mymailserver.com");

        // Create a new email object
        Email email = new Email();

        email.setSubject("This email is signed");
        email.setBody("This is a digitally signed mail");
        email.setFrom("Chilkat Admin <admin@chilkatsoft.com>");
        email.addTo("Chilkat Support", "support@chilkatsoft.com");

        // Indicate that the email should be sent signed.
        email.setSendSigned(true);

        // Load a PFX file into a certificate store object.
        // Then locate the certificate matching the  sender's email address,
        // and use it for signing.
        // (a PFX file may contain more than one certificate.)
        CertStore certStore = new CertStore();
        // The 1st argument is the path of the PFX file, the 2nd arg is the
        // PFX file's password:
        try {
            certStore.loadPfxFile("/pfx_files/chilkatsoft_secret.pfx", "secret");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Find the certificate for the email address:
        JsonObject jsonE = new JsonObject();
        jsonE.updateString("email", "admin@chilkatsoft.com");

        Cert cert = new Cert();
        try {
            certStore.findCert(jsonE, cert);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Alternatively, if a PFX file is known to contain a single certificate,
        // you may load it directly into a Chilkat certificate object.
        // This snippet of source code shows how:
        Cert cert2 = new Cert();
        // The 1st argument is the filename, the 2nd arg is the
        // PFX file's password:
        try {
            cert2.loadPfxFile("/pfx_files/chilkatsoft_secret.pfx", "secret");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // This example will use the cert from the certStore...
        email.setSigningCert(cert);

        // Signed email can be sent in two different ways.
        // In a multipart/signed email, the signature is attached as a separate MIME part.
        // In an opaque email (signedData) the content of the email is encapsulated within the signature
        // and the email is sent as "application/pkcs7-mime".
        // Either should be fine, but some receiving systems might require one or the other..
        mailman.setOpaqueSigning(false);

        // Send a signed email.
        try {
            mailman.sendEmail(email);
            // The LastErrorText property provides information
            // even when successful.
            System.out.println(mailman.getLastErrorText());
            System.out.println("Mail Sent!");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
        }
    }
}