PureBasic
PureBasic
POP3 Verify Signed (S/MIME) Email
Demonstrates how to download and verify digitally signed S/MIME email.Chilkat PureBasic Downloads
IncludeFile "CkStringTable.pb"
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.
mailman.i = CkMailMan::ckCreate()
If mailman.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Set the POP3 server's hostname
CkMailMan::setCkMailHost(mailman, "pop.example.com")
; Set the POP3 login/password.
CkMailMan::setCkPopUsername(mailman, "myLogin")
CkMailMan::setCkPopPassword(mailman, "myPassword")
stUidls.i = CkStringTable::ckCreate()
If stUidls.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkMailMan::ckFetchUidls(mailman,stUidls)
If success = 0
Debug CkMailMan::ckLastErrorText(mailman)
CkMailMan::ckDispose(mailman)
CkStringTable::ckDispose(stUidls)
ProcedureReturn
EndIf
email.i = CkEmail::ckCreate()
If email.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
count.i = CkStringTable::ckCount(stUidls)
i.i = 0
While i < count
; Download the full email.
success = CkMailMan::ckFetchByUidl(mailman,CkStringTable::ckStringAt(stUidls,i),0,0,email)
If success = 0
Debug CkMailMan::ckLastErrorText(mailman)
CkMailMan::ckDispose(mailman)
CkStringTable::ckDispose(stUidls)
CkEmail::ckDispose(email)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
Debug Str(i)
Debug "From: " + CkEmail::ckFrom(email)
Debug "Subject: " + CkEmail::ckSubject(email)
; The security layers of signed and/or encrypted emails
; are automatically "unwrapped" when loaded into
; a Chilkat email object.
; An application only needs to check to see if an email
; was received signed or encrypted, and then examine
; the success/failure. For example:
If CkEmail::ckReceivedSigned(email) = 1
Debug "This email was signed."
; Check to see if the signatures were verified.
If CkEmail::ckSignaturesValid(email) = 1
Debug "Digital signature(s) verified."
Debug "Signer: " + CkEmail::ckSignedBy(email)
success = CkEmail::ckLastSignerCert(email,0,cert)
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkMailMan::ckDispose(mailman)
CkStringTable::ckDispose(stUidls)
CkEmail::ckDispose(email)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
Debug "Signing cert: " + CkCert::ckSubjectCN(cert)
EndIf
Else
Debug "Digital signature verification failed."
EndIf
i = i + 1
Wend
CkMailMan::ckPop3EndSession(mailman)
CkMailMan::ckDispose(mailman)
CkStringTable::ckDispose(stUidls)
CkEmail::ckDispose(email)
CkCert::ckDispose(cert)
ProcedureReturn
EndProcedure