DataFlex
DataFlex
Send a Signed Email using RSASSA-PSS with SHA256
See more SMTP Examples
Demonstrates how to sign and send an email using the RSASSA-PSS signing algorithm with the SHA256 hash algorithm. .Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoPfx
Variant vEmail
Handle hoEmail
Variant vCert
Handle hoCert
Handle hoMailman
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Get a digital certificate with private key from a .pfx
// (Chilkat has many different ways to provide a cert + private key for siging.
// Using a PFX is just one possible option.)
Get Create (RefClass(cComChilkatPfx)) To hoPfx
If (Not(IsComObjectCreated(hoPfx))) Begin
Send CreateComObject of hoPfx
End
Get ComLoadPfxFile Of hoPfx "qa_data/rsassa-pss/privatekey.pfx" "PFX_PASSWORD" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPfx To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
// Create a simple email.
Set ComSubject Of hoEmail To "Sample RSASSA-PSS Signed Email"
Set ComBody Of hoEmail To "Sample RSASSA-PSS Signed Email"
Set ComFrom Of hoEmail To "from_name@mydomain.com"
// Add one ore more recipients..
Get ComAddTo Of hoEmail "Chilkat Support" "support@chilkatsoft.com" To iSuccess
Get ComAddTo Of hoEmail "Chilkat GMail" "chilkat.support@gmail.com" To iSuccess
// Indicate that the email is to be signed, and that we want to use RSASSA-PSS.
Set ComSendSigned Of hoEmail To True
Set ComSigningAlg Of hoEmail To "pss"
Set ComSigningHashAlg Of hoEmail To "sha256"
// Get the certificate to be used for signing.
// (The typical case for a PFX is that it contains a cert with an associated private key,
// as well as other certificates in the chain of authentication. The cert with the private
// key should be in the first position at index 0.)
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
Get pvComObject of hoCert to vCert
Get ComCertAt Of hoPfx 0 vCert To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPfx To sTemp1
Showln sTemp1
Procedure_Return
End
// Tell the email object to use this cert (and private key) for signing.
Get pvComObject of hoCert to vCert
Get ComSetSigningCert Of hoEmail vCert To iSuccess
Get Create (RefClass(cComChilkatMailMan)) To hoMailman
If (Not(IsComObjectCreated(hoMailman))) Begin
Send CreateComObject of hoMailman
End
// Set the SMTP settings for your email account on your mail server.
Set ComSmtpUsername Of hoMailman To "SMTP_LOGIN"
Set ComSmtpPassword Of hoMailman To "SMTP_PASSWORD"
Set ComSmtpHost Of hoMailman To "MY_SMTP_DOMAIN_OR_IP"
Set ComSmtpPort Of hoMailman To 587
Set ComStartTLS Of hoMailman To True
// 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 the email. The mailman will sign the email as directed by the
// property settings of the email object.
Get pvComObject of hoEmail to vEmail
Get ComSendEmail Of hoMailman vEmail To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComCloseSmtpConnection Of hoMailman To iSuccess
If (iSuccess <> True) Begin
Showln "Connection to SMTP server not closed cleanly."
End
Showln "Mail Sent!"
// -----------------------------------------------------------
// This is the MIME of the RSASSA-PSS signed email that was sent
// MIME-Version: 1.0
// Date: Thu, 20 Apr 2017 10:14:58 -0500
// Message-ID: <3682A87344CB3A4FB5EB5BC9908C0C4DA01DA461@CHILKAT13>
// Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha256;
// boundary="------------050103020705000601010800"
// X-Priority: 3 (Normal)
// Subject: Sample RSASSA-PSS Signed Email
// From: support@chilkatsoft.com
// To: "Chilkat Support" <support@chilkatsoft.com>,
// "Chilkat GMail" <chilkat.support@gmail.com>
//
// --------------050103020705000601010800
// Content-Type: text/plain; format=flowed
// Content-Transfer-Encoding: 7bit
//
// Sample RSASSA-PSS Signed Email
// --------------050103020705000601010800
// Content-Transfer-Encoding: base64
// Content-Type: application/pkcs7-signature; name="smime.p7s"
// Content-Disposition: attachment; filename="smime.p7s"
//
// MIIG5wYJKoZIhvcNAQcCoIIG2DCCBtQCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg
// ggL4MIIC9DCCAl2gAwIBAgIJAMPsJCT11cniMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJB
// VTERMA8GA1UECAwIVmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTEhMB8GA1UECgwYSW50ZXJu
// ZXQgV2lkZ2l0cyBQdHkgTHRkMQ8wDQYDVQQDDAZXaWRnZXQxKDAmBgkqhkiG9w0BCQEWGWFkbWlu
// QGludGVybmV0d2lkZ2V0cy5jb20wHhcNMTYxMTAxMTY1MjMyWhcNMjExMDMxMTY1MjMyWjCBkjEL
// MAkGA1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlNZWxib3VybmUxITAfBgNV
// BAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1UEAwwGV2lkZ2V0MSgwJgYJKoZIhvcN
// AQkBFhlhZG1pbkBpbnRlcm5ldHdpZGdldHMuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
// gQDGIdoCjyavs+F/Rm0VIB4m6O7VL1j+1IqieoR9NEX2GQvu2VCdceyxf9qaw1bxipEvjLwUkw7M
// e+BTlLpWQbBMH87s6KpsC8MVyXhMLpP0oM8NFix/vLz2wdLhUh7CZvJA0plqkJk9bj57QIu+EO1k
// tUHM2DFb6sckvCL2yybD1wIDAQABo1AwTjAdBgNVHQ4EFgQUONKKu2zsXIrinWxIGT654vrcQwsw
// HwYDVR0jBBgwFoAUONKKu2zsXIrinWxIGT654vrcQwswDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
// AQsFAAOBgQArFvdi5u9i2QF1Qw+cdC1l7w2Y3+q6RIkln2W8rWJFje00644o8hXy7v46giJCedmF
// ULlhm1n7XIsZGy2W3lJ77v5agn9gFwXu1h3cqkGXkoteE6SQJQXWgsW3GWPveObvTL8LF4y57fgM
// 9ZWS+V9MJajeu44Rf/tU17TLYKjvEjGCA7MwggOvAgEBMIGgMIGSMQswCQYDVQQGEwJBVTERMA8G
// A1UECAwIVmljdG9yaWExEjAQBgNVBAcMCU1lbGJvdXJuZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lk
// Z2l0cyBQdHkgTHRkMQ8wDQYDVQQDDAZXaWRnZXQxKDAmBgkqhkiG9w0BCQEWGWFkbWluQGludGVy
// bmV0d2lkZ2V0cy5jb20CCQDD7CQk9dXJ4jANBglghkgBZQMEAgEFAKCCAjQwGAYJKoZIhvcNAQkD
// MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTcwNDIwMTUxNDU4WjAvBgkqhkiG9w0BCQQx
// IgQgoHOtpFiAgti0cwDw46C8wyYSZbhx2yJqJZ/qRE8WPSQwXwYJKoZIhvcNAQkPMVIwUDALBglg
// hkgBZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsO
// AwIHMA0GCCqGSIb3DQMCAgEoMIGxBgkrBgEEAYI3EAQxgaMwgaAwgZIxCzAJBgNVBAYTAkFVMREw
// DwYDVQQIDAhWaWN0b3JpYTESMBAGA1UEBwwJTWVsYm91cm5lMSEwHwYDVQQKDBhJbnRlcm5ldCBX
// aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMMBldpZGdldDEoMCYGCSqGSIb3DQEJARYZYWRtaW5AaW50
// ZXJuZXR3aWRnZXRzLmNvbQIJAMPsJCT11cniMIGzBgsqhkiG9w0BCRACCzGBo6CBoDCBkjELMAkG
// A1UEBhMCQVUxETAPBgNVBAgMCFZpY3RvcmlhMRIwEAYDVQQHDAlNZWxib3VybmUxITAfBgNVBAoM
// GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1UEAwwGV2lkZ2V0MSgwJgYJKoZIhvcNAQkB
// FhlhZG1pbkBpbnRlcm5ldHdpZGdldHMuY29tAgkAw+wkJPXVyeIwPQYJKoZIhvcNAQEKMDCgDTAL
// BglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASAEgYCDQpT6vJZ9zERJ
// JVX69PGUfCN5Eq9pKzoOTQSrIBe1YgNDSPd5pyOPP2MN1RpI0T/GTQZw4iWy5LZq0T5sjmk3fFVB
// +VZjKtkTuhGaCdzMQXomVLBbI2fN4UaA4v1/Ayrqr8SY9Rsa20TpKv/bufK7oYs083UOtlcA1EHY
// 41wQ5A==
//
// --------------050103020705000601010800--
End_Procedure