Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) 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.
IncludeFile "CkCertStore.pb" IncludeFile "CkCert.pb" IncludeFile "CkEmail.pb" IncludeFile "CkMailMan.pb" Procedure ChilkatExample() ; 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") ; 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 signed") CkEmail::setCkBody(email, "This is a digitally signed mail") CkEmail::setCkFrom(email, "Chilkat Admin <admin@chilkatsoft.com>") success.i = CkEmail::ckAddTo(email,"Chilkat Support","support@chilkatsoft.com") ; Indicate that the email should be sent signed. CkEmail::setCkSendSigned(email, 1) ; 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.) certStore.i = CkCertStore::ckCreate() If certStore.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The 1st argument is the path of the PFX file, the 2nd arg is the ; PFX file's password: success = CkCertStore::ckLoadPfxFile(certStore,"/pfx_files/chilkatsoft_secret.pfx","secret") If success <> 1 Debug CkCertStore::ckLastErrorText(certStore) CkMailMan::ckDispose(mailman) CkEmail::ckDispose(email) CkCertStore::ckDispose(certStore) ProcedureReturn EndIf cert.i = CkCertStore::ckFindCertBySubjectE(certStore,"admin@chilkatsoft.com") If CkCertStore::ckLastMethodSuccess(certStore) = 0 Debug CkCertStore::ckLastErrorText(certStore) CkMailMan::ckDispose(mailman) CkEmail::ckDispose(email) CkCertStore::ckDispose(certStore) ProcedureReturn EndIf ; 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: cert2.i = CkCert::ckCreate() If cert2.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The 1st argument is the filename, the 2nd arg is the ; PFX file's password: success = CkCert::ckLoadPfxFile(cert2,"/pfx_files/chilkatsoft_secret.pfx","secret") If success <> 1 Debug CkCert::ckLastErrorText(cert2) CkCert::ckDispose(cert) CkMailMan::ckDispose(mailman) CkEmail::ckDispose(email) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndIf ; This example will use the cert from the certStore... success = CkEmail::ckSetSigningCert(email,cert) ; 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.. CkMailMan::setCkOpaqueSigning(mailman, 0) ; Send a signed email. success = CkMailMan::ckSendEmail(mailman,email) If success <> 1 Debug CkMailMan::ckLastErrorText(mailman) Else ; The LastErrorText property provides information ; even when successful. Debug CkMailMan::ckLastErrorText(mailman) Debug "Mail Sent!" EndIf CkCert::ckDispose(cert) CkMailMan::ckDispose(mailman) CkEmail::ckDispose(email) CkCertStore::ckDispose(certStore) CkCert::ckDispose(cert2) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.