diff options
-rw-r--r-- | perllib/FixMyStreet/Email/Sender.pm | 5 | ||||
-rw-r--r-- | t/email/sender.t | 36 |
2 files changed, 40 insertions, 1 deletions
diff --git a/perllib/FixMyStreet/Email/Sender.pm b/perllib/FixMyStreet/Email/Sender.pm index e6148a56c..2fb819fbc 100644 --- a/perllib/FixMyStreet/Email/Sender.pm +++ b/perllib/FixMyStreet/Email/Sender.pm @@ -28,11 +28,14 @@ sub build_default_transport { if ( FixMyStreet->test_mode ) { Email::Sender::Util->easy_transport(Test => {}); } elsif ( my $smtp_host = FixMyStreet->config('SMTP_SMARTHOST') ) { - my $type = FixMyStreet->config('SMTP_TYPE') || ''; + my $type = lc (FixMyStreet->config('SMTP_TYPE') || ''); my $port = FixMyStreet->config('SMTP_PORT') || ''; my $username = FixMyStreet->config('SMTP_USERNAME') || ''; my $password = FixMyStreet->config('SMTP_PASSWORD') || ''; + die "Bad SMTP_TYPE config: is $type, should be tls, ssl, or blank" + unless $type =~ /^(tls|ssl|)$/; + my $ssl = $type eq 'tls' ? 'starttls' : $type eq 'ssl' ? 'ssl' : ''; my $args = { host => $smtp_host, diff --git a/t/email/sender.t b/t/email/sender.t new file mode 100644 index 000000000..49310db83 --- /dev/null +++ b/t/email/sender.t @@ -0,0 +1,36 @@ +use FixMyStreet::Test; +use FixMyStreet::Email::Sender; +use Test::Exception; + +# Specifically testing live email sending errors +FixMyStreet->test_mode(0); + +subtest 'SMTP settings' => sub { + FixMyStreet::override_config { + SMTP_SMARTHOST => 'localhost', + SMTP_TYPE => 'bad', + }, sub { + throws_ok { FixMyStreet::Email::Sender->send('test') } + qr/Bad SMTP_TYPE config: is bad, should be tls, ssl, or blank/, 'Bad SMTP_TYPE throws'; + }; + + FixMyStreet::override_config { + SMTP_SMARTHOST => 'localhost', + SMTP_TYPE => 'TLS', + }, sub { + throws_ok { FixMyStreet::Email::Sender->send('test') } + qr/no recipients/, 'Upper case SMTP_TYPE passes, no recipients throws'; + }; +}; + +subtest 'sendmail default' => sub { + FixMyStreet::override_config { + SMTP_SMARTHOST => '', + }, sub { + FixMyStreet::Email::Sender->reset_default_transport; + throws_ok { FixMyStreet::Email::Sender->send('test') } + qr/no recipients|couldn't find a sendmail/, 'Sendmail throws some form of error'; + }; +}; + +done_testing(); |