--- /dev/null
+#!/usr/bin/env perl
+
+use strict;
+use Getopt::Std;
+use File::Basename;
+use Date::Parse;
+use POSIX qw(strftime);
+
+$| = 1;
+
+my %opts;
+getopts('hH:l:s:p:f:i:n:r:', \%opts);
+
+my $STATE_OK = 0;
+my $STATE_WARNING = 1;
+my $STATE_CRITICAL = 2;
+my $STATE_UNKNOWN = 3;
+
+if ($opts{'h'} || scalar(%opts) == 0) {
+ &print_help();
+ exit($STATE_OK);
+}
+
+my $port = $opts{'p'};
+my $host = $opts{'H'};
+my $login = $opts{'l'};
+if ($login ne '') {
+ $login = "$login@";
+}
+
+my $identity = $opts{'i'};
+my $local_directory = $opts{'n'};
+my $return_path = $opts{'r'};
+
+my @emails_to_send = split(/,/, $opts{'s'});
+my @emails_to_expect = split(/,/, $opts{'f'});
+
+my $cmd_result;
+if ($local_directory ne '') {
+ if (@emails_to_expect and ! -d $local_directory) {
+ print "Emails $host UNKNOWN - Could not find local directory";
+ exit($STATE_UNKNOWN);
+ }
+ $cmd_result = `send_mails $local_directory $return_path @emails_to_send 2>&1`;
+} else {
+ $cmd_result = `ssh -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -p $port -i $identity $login$host send_mails @emails_to_send 2>&1`;
+
+ if ($cmd_result =~ /Host key verification failed./) {
+ print "Emails $host UNKNOWN - Could not connect to host with ssh key\n";
+ exit($STATE_UNKNOWN);
+ }
+}
+
+my @lines = split(/\n/, $cmd_result);
+
+my %found_emails;
+
+foreach my $line (@lines) {
+ my @split_line = split(/;/, $line, 2);
+ $found_emails{$split_line[0]} = $split_line[1];
+}
+
+my $output = "";
+my $old = 0;
+foreach my $email_from (@emails_to_expect) {
+ my @email_split = split(/:/, $email_from);
+ my $email = $email_split[0];
+ my $from = $email_split[1];
+
+ if ( exists $found_emails{$email} ) {
+ my $email_date = str2time($found_emails{$email});
+ my $current_date = strftime "%s", localtime;
+
+ if ($current_date - $email_date > 60*30) {
+ $output = "$output$email ($found_emails{$email} from $from) ";
+ }
+ $old = ($current_date - $email_date) > $old ? ($current_date - $email_date) : $old;
+ } else {
+ $output = "$output$email (missing) "
+ }
+}
+
+if ($output ne '') {
+ print "Emails $host CRITICAL - expecting emails: $output | timestamp=${old}s;;;;\n";
+ exit($STATE_CRITICAL);
+} else {
+ print "Emails $host OK | timestamp=${old}s;;;;\n";
+ exit($STATE_OK);
+}
+
+sub print_help() {
+ print << "EOF";
+Check sent emails
+
+Options:
+-h
+ Print detailed help screen
+
+-H
+ Host to check
+
+-l
+ Login
+
+-i
+ Identity file
+
+-n
+ Don’t use ssh, pass that directory to script
+
+-r
+ Return path for local e-mails
+
+-s
+ Comma separated list of emails to send from the host.
+
+-f
+ Comma separated list of emails to expect on the host.
+EOF
+}
+