Sample code for 30+ languages & platforms
PureBasic

Send aes-gcm authEnvelopedData Encrypted Email

See more SMTP Examples

Note: This example requires Chilkat v10.0.0 or later

Demonstrates how to send encrypted email using 128-bit AES in GCM mode.

"AES-GCM" (Advanced Encryption Standard - Galois/Counter Mode) is a cryptographic algorithm that provides both encryption and integrity protection (authentication). When used in the context of email security with "authEnvelopedData", it often refers to a method of securely sending encrypted and authenticated email content.

Here’s a brief breakdown:

  • AES-GCM: Combines symmetric encryption (AES) with authentication, ensuring both the confidentiality and integrity of the message. It generates an authentication tag to detect any unauthorized changes.
  • authEnvelopedData: Refers to a type of structure used in secure email protocols (like S/MIME) to package encrypted content. It contains the encrypted data and associated encrypted session keys.
  • Email Security: When applied to emails, AES-GCM ensures the email content is encrypted (confidential) and also tamper-resistant (authenticated), with the encryption keys typically shared securely using asymmetric encryption (e.g., public key infrastructure, or PKI).

In short, AES-GCM with "authEnvelopedData" provides a way to encrypt and authenticate emails, making them confidential and resistant to tampering.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkCert.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkMailMan.pb"

Procedure ChilkatExample()

    success.i = 0

    ; 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.
    mailman.i = CkMailMan::ckCreate()
    If mailman.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkMailMan::setCkSmtpHost(mailman, "smtp.example.com")

    CkMailMan::setCkSmtpUsername(mailman, "my_smtp_login")
    CkMailMan::setCkSmtpPassword(mailman, "my_smtp_password")

    ; The typical SMTP ports are 465 for implicit SSL/TLS or 587 for explicit SSL/TLS
    CkMailMan::setCkSmtpPort(mailman, 465)
    CkMailMan::setCkSmtpSsl(mailman, 1)

    ; Use the recipient's certificate for encryption.
    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkCert::ckLoadFromFile(cert,"c:/someDir/recipient_cert.cer")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert)
        CkMailMan::ckDispose(mailman)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    email.i = CkEmail::ckCreate()
    If email.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkEmail::setCkSubject(email, "This email is encrypted")
    CkEmail::setCkBody(email, "This is AES-GCM encrypted mail")
    CkEmail::setCkFrom(email, "Mary <mary@example1.com>")
    success = CkEmail::ckAddTo(email,"Joe","joe@example.com")

    ; Specify that AES-GCM w/ authEnvelopedData is to be used. 
    ; Also specify other params..
    CkEmail::setCkPkcs7CryptAlg(email, "aes-gcm")
    CkEmail::setCkPkcs7KeyLength(email, 128)
    CkEmail::setCkOaepPadding(email, 1)
    CkEmail::setCkOaepHash(email, "sha256")
    CkEmail::setCkOaepMgfHash(email, "sha256")

    ; Indicate the email is to be sent encrypted.
    CkEmail::setCkSendEncrypted(email, 1)

    ; Specify the certificate to be used for encryption.
    success = CkEmail::ckSetEncryptCert(email,cert)

    success = CkMailMan::ckSendEmail(mailman,email)
    If success <> 1
        Debug CkMailMan::ckLastErrorText(mailman)
    Else
        Debug "Mail Sent!"
    EndIf



    CkMailMan::ckDispose(mailman)
    CkCert::ckDispose(cert)
    CkEmail::ckDispose(email)


    ProcedureReturn
EndProcedure