Sample code for 30+ languages & platforms
PureBasic

Send Encrypted Email to Multiple Recipients

Demonstrates how to create and send an S/MIME encrypted email to multiple recipients. The digital certificate of each recipient is required. The encrypting/sending process uses each recipient's digital certificate (which internally contains the public key). Each recipient decrypts the received email using his/her private key.

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

    ; Set the SMTP server.
    CkMailMan::setCkSmtpHost(mailman, "smtp.mymailserver.com")

    ; Load each recipient's certificate into a Chilkat certificate object.
    ; This example loads the certificates from files.  However, the Chilkat
    ; certificate object provides other means for loading certificates,
    ; such as from in-memory PEM strings, or in-memory binary DER encoded form, etc.
    cert1.i = CkCert::ckCreate()
    If cert1.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkCert::ckLoadFromFile(cert1,"recipient1.cer")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert1)
        CkMailMan::ckDispose(mailman)
        CkCert::ckDispose(cert1)
        ProcedureReturn
    EndIf

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

    success = CkCert::ckLoadFromFile(cert2,"recipient2.cer")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert2)
        CkMailMan::ckDispose(mailman)
        CkCert::ckDispose(cert1)
        CkCert::ckDispose(cert2)
        ProcedureReturn
    EndIf

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

    success = CkCert::ckLoadFromFile(cert3,"recipient3.cer")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert3)
        CkMailMan::ckDispose(mailman)
        CkCert::ckDispose(cert1)
        CkCert::ckDispose(cert2)
        CkCert::ckDispose(cert3)
        ProcedureReturn
    EndIf

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

    CkEmail::setCkSubject(email, "This email is encrypted and sent to 3 recipients")
    CkEmail::setCkBody(email, "This is an S/MIME encrypted mail sent to 3 recipients")
    CkEmail::setCkFrom(email, "Chilkat Support <support@chilkatsoft.com>")

    ; Make each of the certificates available for encrypting the email
    ; by calling AddEncryptCert for each.
    success = CkEmail::ckAddEncryptCert(email,cert1)
    If success = 1
        success = CkEmail::ckAddEncryptCert(email,cert2)
    EndIf

    If success = 1
        success = CkEmail::ckAddEncryptCert(email,cert3)
    EndIf

    If success <> 1
        Debug CkEmail::ckLastErrorText(email)
        CkMailMan::ckDispose(mailman)
        CkCert::ckDispose(cert1)
        CkCert::ckDispose(cert2)
        CkCert::ckDispose(cert3)
        CkEmail::ckDispose(email)
        ProcedureReturn
    EndIf

    ; Add 3 recipients to the email (2 TO addresses, and 1 CC address)
    success = CkEmail::ckAddTo(email,"Recipient 1","admin@cknotes.com")
    success = CkEmail::ckAddTo(email,"Recipient 2","somebody001122@yahoo.com")
    success = CkEmail::ckAddCC(email,"Recipient 3","somebody123xyz@gmail.com")

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

    ; Send the encrypted email...
    success = CkMailMan::ckSendEmail(mailman,email)
    If success <> 1
        Debug CkMailMan::ckLastErrorText(mailman)
    Else
        Debug "Encrypted Email Sent!"
    EndIf



    CkMailMan::ckDispose(mailman)
    CkCert::ckDispose(cert1)
    CkCert::ckDispose(cert2)
    CkCert::ckDispose(cert3)
    CkEmail::ckDispose(email)


    ProcedureReturn
EndProcedure