Sample code for 30+ languages & platforms
Perl Requires Chilkat v11.0.0+

POP3 Verify Signed (S/MIME) Email

Demonstrates how to download and verify digitally signed S/MIME email.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

#  This example requires the Chilkat API to have been previously unlocked.
#  See Global Unlock Sample for sample code.

$mailman = chilkat::CkMailMan->new();

#  Set the POP3 server's hostname
$mailman->put_MailHost("pop.example.com");

#  Set the POP3 login/password.
$mailman->put_PopUsername("myLogin");
$mailman->put_PopPassword("myPassword");

$stUidls = chilkat::CkStringTable->new();
$success = $mailman->FetchUidls($stUidls);
if ($success == 0) {
    print $mailman->lastErrorText() . "\r\n";
    exit;
}

$email = chilkat::CkEmail->new();
$cert = chilkat::CkCert->new();

$count = $stUidls->get_Count();
$i = 0;
while ($i < $count) {
    #  Download the full email.
    $success = $mailman->FetchByUidl($stUidls->stringAt($i),0,0,$email);
    if ($success == 0) {
        print $mailman->lastErrorText() . "\r\n";
        exit;
    }

    print $i . "\r\n";
    print "From: " . $email->ck_from() . "\r\n";
    print "Subject: " . $email->subject() . "\r\n";

    #  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 ($email->get_ReceivedSigned() == 1) {

        print "This email was signed." . "\r\n";

        #  Check to see if the signatures were verified.
        if ($email->get_SignaturesValid() == 1) {
            print "Digital signature(s) verified." . "\r\n";
            print "Signer: " . $email->signedBy() . "\r\n";

            $success = $email->LastSignerCert(0,$cert);
            if ($success == 0) {
                print $email->lastErrorText() . "\r\n";
                exit;
            }

            print "Signing cert: " . $cert->subjectCN() . "\r\n";
        }

    }
    else {
        print "Digital signature verification failed." . "\r\n";
    }

    $i = $i + 1;
}

$mailman->Pop3EndSession();