Sample code for 30+ languages & platforms
AutoIt 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 AutoIt Downloads

AutoIt
Local $bSuccess = False

;  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.
$oMailman = ObjCreate("Chilkat.MailMan")

;  Set the SMTP server.
$oMailman.SmtpHost = "smtp.mymailserver.com"

;  Create a new email object
$oEmail = ObjCreate("Chilkat.Email")

$oEmail.Subject = "This email is signed"
$oEmail.Body = "This is a digitally signed mail"
$oEmail.From = "Chilkat Admin <admin@chilkatsoft.com>"
$bSuccess = $oEmail.AddTo("Chilkat Support","support@chilkatsoft.com")

;  Indicate that the email should be sent signed.
$oEmail.SendSigned = 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.)
$oCertStore = ObjCreate("Chilkat.CertStore")
;  The 1st argument is the path of the PFX file, the 2nd arg is the 
;  PFX file's password:
$bSuccess = $oCertStore.LoadPfxFile("/pfx_files/chilkatsoft_secret.pfx","secret")
If ($bSuccess <> True) Then
    ConsoleWrite($oCertStore.LastErrorText & @CRLF)
    Exit
EndIf

;  Find the certificate for the email address:
$oJsonE = ObjCreate("Chilkat.JsonObject")
$oJsonE.UpdateString("email","admin@chilkatsoft.com")

$oCert = ObjCreate("Chilkat.Cert")
$bSuccess = $oCertStore.FindCert($oJsonE,$oCert)
If ($bSuccess = False) Then
    ConsoleWrite($oCertStore.LastErrorText & @CRLF)
    Exit
EndIf

;  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:
$oCert2 = ObjCreate("Chilkat.Cert")
;  The 1st argument is the filename, the 2nd arg is the 
;  PFX file's password:
$bSuccess = $oCert2.LoadPfxFile("/pfx_files/chilkatsoft_secret.pfx","secret")
If ($bSuccess <> True) Then
    ConsoleWrite($oCert2.LastErrorText & @CRLF)
    Exit
EndIf

;  This example will use the cert from the certStore...
$bSuccess = $oEmail.SetSigningCert($oCert)

;  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..
$oMailman.OpaqueSigning = False

;  Send a signed email.
$bSuccess = $oMailman.SendEmail($oEmail)
If ($bSuccess <> True) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
Else
    ;  The LastErrorText property provides information
    ;  even when successful.
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    ConsoleWrite("Mail Sent!" & @CRLF)
EndIf