diff options
Diffstat (limited to 'perllib/FixMyStreet/EmailSend.pm')
-rw-r--r-- | perllib/FixMyStreet/EmailSend.pm | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/EmailSend.pm b/perllib/FixMyStreet/EmailSend.pm new file mode 100644 index 000000000..29c93b2d6 --- /dev/null +++ b/perllib/FixMyStreet/EmailSend.pm @@ -0,0 +1,70 @@ +package FixMyStreet::EmailSend; + +use strict; +use warnings; + +BEGIN { + # Should move away from Email::Send, but until then: + $Return::Value::NO_CLUCK = 1; +} + +use FixMyStreet; +use Email::Send; + +=head1 NAME + +FixMyStreet::EmailSend + +=head1 DESCRIPTION + +Thin wrapper around Email::Send - configuring it correctly according to our config. + +If the config value 'SMTP_SMARTHOST' is set then email is routed via SMTP to +that. Otherwise it is sent using a 'sendmail' like binary on the local system. + +And finally if if FixMyStreet->test_mode returns true then emails are not sent +at all but are stored in memory for the test suite to inspect (using +Email::Send::Test). + +=cut + +my $args = undef; + +if ( FixMyStreet->test_mode ) { + # Email::Send::Test + $args = { mailer => 'Test', }; +} elsif ( my $smtp_host = FixMyStreet->config('SMTP_SMARTHOST') ) { + # Email::Send::SMTP + my $type = FixMyStreet->config('SMTP_TYPE') || ''; + my $port = FixMyStreet->config('SMTP_PORT') || ''; + my $username = FixMyStreet->config('SMTP_USERNAME') || ''; + my $password = FixMyStreet->config('SMTP_PASSWORD') || ''; + + unless ($port) { + $port = 25; + $port = 465 if $type eq 'ssl'; + $port = 587 if $type eq 'tls'; + } + + my $mailer_args = [ + Host => $smtp_host, + Port => $port, + ]; + push @$mailer_args, ssl => 1 if $type eq 'ssl'; + push @$mailer_args, tls => 1 if $type eq 'tls'; + push @$mailer_args, username => $username, password => $password + if $username && $password; + $args = { + mailer => 'FixMyStreet::EmailSend::DoNotReply', + mailer_args => $mailer_args, + }; +} else { + # Email::Send::Sendmail + $args = { mailer => 'Sendmail' }; +} + +sub new { + my ($cls, %hash) = @_; + my %args = ( %$args, %hash ); + return Email::Send->new(\%args); +} |