aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/Email/Sender.pm5
-rw-r--r--t/email/sender.t36
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();