Sample code for 30+ languages & platforms
DataFlex

Send an Email with a Digital Signature

See more Email Object Examples

Demonstrates the Chilkat Email.SendSigned property. Set it to true to have the email sent with a digital signature (the default is false). Signing also requires a certificate with access to its private key. This example loads that certificate (and its private key) from a PFX file with Cert.LoadPfxFile, supplies it via SetSigningCert, and enables signed sending.

Background: Signing is the mirror image of encrypting. To encrypt for a recipient you use their public certificate; to sign you use your own private key, and recipients verify with your public certificate. A signature does not hide the message — a signed email is still readable by anyone — but it proves who sent it and guarantees the content was not tampered with. A PFX (also called PKCS#12, .pfx or .p12) is a password-protected file that bundles a certificate together with its private key, making it a convenient single-file source for signing credentials.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoEmail
    Variant vCert
    Handle hoCert
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    //  Demonstrates the Email.SendSigned property with a full signing setup.  Set SendSigned
    //  to true to have the email sent with a digital signature.  Signing requires a certificate
    //  with access to its private key, which we load here from a PFX (.pfx / .p12) file.

    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End
    Set ComSubject Of hoEmail To "Signed email"
    Set ComBody Of hoEmail To "This message will be sent with a digital signature."
    Set ComFrom Of hoEmail To "alice@example.com"
    Get ComAddTo Of hoEmail "Bob" "bob@example.com" To iSuccess

    //  Load the signing certificate (including its private key) from a PFX file.
    //  The 2nd argument is the PFX password.
    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End
    Get ComLoadPfxFile Of hoCert "qa_data/certs/signer.pfx" "pfx_password" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCert To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Provide the signing certificate.
    Get pvComObject of hoCert to vCert
    Get ComSetSigningCert Of hoEmail vCert To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoEmail To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Request that the email be sent with a digital signature.
    Set ComSendSigned Of hoEmail To True

    Get ComSendSigned Of hoEmail To bTemp1
    Showln "SendSigned = " bTemp1

    //  Note: The path "qa_data/certs/signer.pfx" is a relative local filesystem path,
    //  relative to the current working directory of the running application.


End_Procedure