Sample code for 30+ languages & platforms
Perl

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();