Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoMailman
    Variant vEmail
    Handle hoEmail
    Variant vCert
Store    Handle hoCertStore
    Variant vJsonE
    Handle hoJsonE
    Variant vCert
    Handle hoCert
    Variant vCert
2    Handle hoCert2
    String sTemp1

    Move False To iSuccess

    // 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.
    Get Create (RefClass(cComChilkatMailMan)) To hoMailman
    If (Not(IsComObjectCreated(hoMailman))) Begin
        Send CreateComObject of hoMailman
    End

    // Set the SMTP server.
    Set ComSmtpHost Of hoMailman To "smtp.mymailserver.com"

    // Create a new email object
    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End

    Set ComSubject Of hoEmail To "This email is signed"
    Set ComBody Of hoEmail To "This is a digitally signed mail"
    Set ComFrom Of hoEmail To "Chilkat Admin <admin@chilkatsoft.com>"
    Get ComAddTo Of hoEmail "Chilkat Support" "support@chilkatsoft.com" To iSuccess

    // Indicate that the email should be sent signed.
    Set ComSendSigned Of hoEmail To 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.)
    Get Create (RefClass(cComChilkatCertStore)) To hoCertStore
    If (Not(IsComObjectCreated(hoCertStore))) Begin
        Send CreateComObject of hoCertStore
    End
    // The 1st argument is the path of the PFX file, the 2nd arg is the 
    // PFX file's password:
    Get ComLoadPfxFile Of hoCertStore "/pfx_files/chilkatsoft_secret.pfx" "secret" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoCertStore To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Find the certificate for the email address:
    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonE
    If (Not(IsComObjectCreated(hoJsonE))) Begin
        Send CreateComObject of hoJsonE
    End
    Get ComUpdateString Of hoJsonE "email" "admin@chilkatsoft.com" To iSuccess

    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End
    Get pvComObject of hoJsonE to vJsonE
    Get pvComObject of hoCert to vCert
    Get ComFindCert Of hoCertStore vJsonE vCert To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCertStore To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // 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:
    Get Create (RefClass(cComChilkatCert)) To hoCert2
    If (Not(IsComObjectCreated(hoCert2))) Begin
        Send CreateComObject of hoCert2
    End
    // The 1st argument is the filename, the 2nd arg is the 
    // PFX file's password:
    Get ComLoadPfxFile Of hoCert2 "/pfx_files/chilkatsoft_secret.pfx" "secret" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoCert2 To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // This example will use the cert from the certStore...
    Get pvComObject of hoCert to vCert
    Get ComSetSigningCert Of hoEmail vCert To iSuccess

    // 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..
    Set ComOpaqueSigning Of hoMailman To False

    // Send a signed email.
    Get pvComObject of hoEmail to vEmail
    Get ComSendEmail Of hoMailman vEmail To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoMailman To sTemp1
        Showln sTemp1
    End
    Else Begin
        // The LastErrorText property provides information
        // even when successful.
        Get ComLastErrorText Of hoMailman To sTemp1
        Showln sTemp1
        Showln "Mail Sent!"
    End



End_Procedure