Added SASL and TLS support
[opendmarc.git] / usr / sbin / opendmarc-reports
index 43f1ea4c54a446dcb1a3a39d0d583165b0734f2c..4ae243f27717e177feec0d294533fc7d5369f76c 100755 (executable)
@@ -23,6 +23,7 @@ use IO::Compress::Zip qw(zip);
 use POSIX;
 use MIME::Base64;
 use Net::SMTP;
+use Authen::SASL;
 
 require DBD::mysql;
 
@@ -132,7 +133,10 @@ my $repdom       = hostdomain();
 my $repemail     = "postmaster@" . $repdom;
 
 my $smtp_server  = '127.0.0.1';
-my $smtp_port    = 25;
+my $smtp_port    = 587;
+my $smtp_user;
+my $smtp_passwd;
+my $smtp_usetls  = 0;
 my $smtp;
 
 my $answer;
@@ -161,6 +165,9 @@ sub usage
        print STDERR "\t--report-org       reporting organization [$repdom]\n";
        print STDERR "\t--smtp-port        smtp server port [$smtp_port]\n";
        print STDERR "\t--smtp-server      smtp server [$smtp_server]\n";
+       print STDERR "\t--smtp-user        smtp user (for SASL login)\n";
+       print STDERR "\t--smtp-passwd      smtp password (for SASL login)\n";
+       print STDERR "\t--smtp-use-tls     use TLS for SMTP\n";
        print STDERR "\t--test             don't send reports\n";
        print STDERR "\t--utc              operate in UTC\n";
        print STDERR "\t                   (implies --keepfiles --noupdate)\n";
@@ -189,6 +196,9 @@ my $opt_retval = &Getopt::Long::GetOptions ('day!' => \$daybound,
                                             'report-org=s' => \$repdom,
                                             'smtp-server=s' => \$smtp_server,
                                             'smtp-port=i' => \$smtp_port,
+                                            'smtp-user=s' => \$smtp_user,
+                                                                                       'smtp-passwd=s' => \$smtp_passwd,
+                                                                                       'smtp-use-tls!' => \$smtp_usetls,
                                             'update!' => \$doupdate,
                                             'utc!' => \$use_utc,
                                             'verbose+' => \$verbose,
@@ -385,12 +395,27 @@ if ($verbose)
 $smtp = Net::SMTP->new($smtp_server,
                        'Port' => $smtp_port,
                        'Hello' => hostfqdn());
+
 if (!defined($smtp))
 {
        print STDERR "$progname: open SMTP server $smtp_server:$smtp_port failed\n";
        exit(1);
 }
 
+if ($smtp_usetls)
+{
+       $smtp->starttls();
+}
+
+if (defined($smtp_user))
+{
+       if (!$smtp->auth($smtp_user, $smtp_passwd))
+       {
+               print STDERR "$progname: could not login to $smtp_server as user $smtp_user\n";
+               exit(1);
+       }
+}
+
 foreach (@$domainset)
 {
        $domain = $_->[0];