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