The following vb6 example codes demonstrate how to encrypt email to S/MIME format with digital signature.
After the recipient received your email with digital signature, the recipient can get your digital certificate public key from your digital signature. Then the recipient can encrypt an email with your public key and send it to you. Only you can decrypt this email with your private key. That is how S/MIME can protect your email content. If you don’t expose your digital certificate private key to others, none can read your email which is encrypted by your public key.
If you received an email with digital signature, your email client usually stores the public key of the sender in “Control Panel” -> “Internet Options” -> “Content” -> “Certificates” -> “Other People”.
Then you can use the following code to encrypt email and send it to your recipient.
EASendMail is a SMTP component which supports all operations of SMTP/ESMTP protocols (RFC 821, RFC 822, RFC 2554). Before you can use the following example codes, you should download the EASendMail Installer and install it on your machine at first.
To use EASendMail SMTP ActiveX Object in your project, the first step is “Add reference
of EASendMail to your project”. Please select menu ->
EASendMailObj ActiveX Object, click
OK, the reference will be added
to current project, and you can start to use it to send email in your VB6 project.
Open VBA IDE by press
Alt+F11, Please select menu ->
References -> and select
EASendMailObj ActiveX Object,
click OK, the reference will be added to current VBA project, and you can start to use it to send email in your VBA project.
The following example codes demonstrate encrypting email message with digital signature - S/MIME.
In order to run it correctly, please change
recipient value to yours.
To get full sample projects, please download and install EASendMail on your machine.
Const CRYPT_MACHINE_KEYSET = 32 Const CRYPT_USER_KEYSET = 4096 Const CERT_SYSTEM_STORE_CURRENT_USER = 65536 Const CERT_SYSTEM_STORE_LOCAL_MACHINE = 131072 Const ConnectNormal = 0 Const ConnectSSLAuto = 1 Const ConnectSTARTTLS = 2 Const ConnectDirectSSL = 3 Const ConnectTryTLS = 4 Private Sub btnEncryptEmail_Click() Dim oSmtp As New EASendMailObjLib.Mail oSmtp.LicenseCode = "TryIt" ' Set your sender email address oSmtp.FromAddr = "email@example.com" ' Add recipient email address oSmtp.AddRecipientEx "firstname.lastname@example.org", 0 ' Set email subject oSmtp.Subject = "test encrypted email from VB 6.0 project" ' Set email body oSmtp.BodyText = "this is a test encrypted email sent from VB 6.0 project" ' Add digital signature If Not oSmtp.SignerCert.FindSubject("email@example.com", _ CERT_SYSTEM_STORE_CURRENT_USER, "my") Then MsgBox oSmtp.SignerCert.GetLastError() Exit Sub End If If Not oSmtp.SignerCert.HasPrivateKey Then MsgBox "Signer certificate has not private key, " & _ " this certificate can not be used to sign email!" Exit Sub End If ' Find the encrypting certificate for every recipients Dim oEncryptCert As New EASendMailObjLib.Certificate If Not oEncryptCert.FindSubject("firstname.lastname@example.org", _ CERT_SYSTEM_STORE_CURRENT_USER, "AddressBook") Then If Not oEncryptCert.FindSubject("email@example.com", _ CERT_SYSTEM_STORE_CURRENT_USER, "my") Then MsgBox oEncryptCert.GetLastError() Exit Sub End If End If ' Add encrypting certificate oSmtp.RecipientsCerts.Add oEncryptCert ' Your SMTP server address oSmtp.ServerAddr = "smtp.emailarchitect.net" ' User and password for ESMTP authentication, if your server doesn't require ' User authentication, please remove the following codes. oSmtp.UserName = "firstname.lastname@example.org" oSmtp.Password = "testpassword" ' ConnectTryTLS means if server supports SSL/TLS connection, SSL/TLS is used automatically oSmtp.ConnectType = ConnectTryTLS ' If your server uses 587 port ' oSmtp.ServerPort = 587 ' If your server uses 25/587/465 port with SSL/TLS ' oSmtp.ConnectType = ConnectSSLAuto ' oSmtp.ServerPort = 25 ' 25 or 587 or 465 MsgBox "start to send email ..." If oSmtp.SendMail() = 0 Then MsgBox "email was sent successfully!" Else MsgBox "failed to send email with the following error:" & oSmtp.GetLastErrDescription() End If End Sub
You can use EncryptionAlgorithm property to set RC2, RC4, 3DES, AES128, AES192 or AES256 encryption algorithm. RSAES-OAEP (AES128, AES192 and AES256) is recommended.
RSA-OAEP Encryption with SHA256 HASH
If you need to use RSA-OAEP encryption with sha256 scheme, please have a look at this topic:
TLS is the successor of SSL, more and more SMTP servers require
TLS 1.2 encryption now.
If your operating system is
Windows XP/Vista/Windows 7/Windows 2003/2008/2008 R2/2012/2012 R2, you need to
enable TLS 1.2 protocol in your operating system like this:
Seperate builds of run-time dll for 32 and x64 platform
|Installation Path\Lib\native\x86\EASendMailObj.dll||32 bit|
|Installation Path\Lib\native\x64\EASendMailObj.dll||64 bit|
For VB6, C++, Delphi or other standard exe application, you can distribute EASendMailObj.dll with your application to target machine without COM-registration and installer. To learn more detail, please have a look at Registration-free COM with Manifest File.
For ASP, VBScript, VBA, MS SQL Stored Procedure, you need to install EASendMail on target machine by EASendMail installer, both 32bit/x64 DLL are installed and registered.