Sample code for 30+ languages & platforms
AutoIt

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