#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use Data::Dumper;
my $gauthtxt= "gauth.txt"; # can define default sending user account
+and password
## format: 'user\temail\npasswd\tstring\n'
################################################################
# parse inputs
# defaults
my %smtp= ( server => 'smtp.gmail.com', port => '587', subject => "tes
+ting gmailer.pl", body => "gmail-tester $0: ".localtime() );
# more defaults in gauth.txt
if (-e $gauthtxt) {
print STDERR "[reading $gauthtxt]\n";
open(my $GA, "<", $gauthtxt);
while (<$GA>) {
chomp; (/^([a-z]+)\s+(.*)$/) or die "line in $gauthtxt is not pars
+eable: $_\n";
$smtp{$1}= $2;
}
close($GA);
}
# command line arguments
foreach (@ARGV) {
foreach my $keyword (qw(user to passwd subject body)) { (/^$keyword=
+(.*)/) and $smtp{$keyword}=$1; }
}
(exists{$smtp{from})) and $smtp{user}=$smtp{from}; ## special equivale
+nce
################################################################
# check inputs
foreach (qw(user to passwd subject body)) {
exists($smtp{$_}) or die "'$_' needs to be in $gauthtxt or spcified
+on command line with '$_=...'\n";
}
use Email::Valid;
(Email::Valid->address($smtp{user})) or die "your own user account $sm
+tp{user} is not a valid email address";
(Email::Valid->address($smtp{to})) or die "your recipientd account $sm
+tp{to} is not a valid email address";
################################################################
# send email
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTPS ();
use Email::Simple ();
use Email::Simple::Creator ();
my $transport = Email::Sender::Transport::SMTPS->new({
host => $smtp{server},
port => $smtp{port},
ssl => "starttls",
sasl_username => $smtp{user},
sasl_password => $smtp{passwd},
});
my $email = Email::Simple->create(
header => [
To => $smtp{to},
From => $smtp{user},
Subject => $smtp{subject}
],
body => $smtp{body}."\n",
);
sendmail($email, { transport => $transport });
print "\nemail sent from $smtp{user} to $smtp{to}.\n";
| [reply] [d/l] |