diff options
author | Marius Halden <marius.h@lden.org> | 2016-03-28 20:38:28 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2016-03-28 20:38:28 +0200 |
commit | 6c1118dbf2c4b15bcfcd77600d36f2389428c75e (patch) | |
tree | da81756a344a89502df5479b860b6f4a24b6ed92 /perllib/FixMyStreet/EmailSend.pm | |
parent | a2d67ca6de255ff04badb7cb5a62f7d3df3ce293 (diff) | |
parent | 4345263c9de752454795ad57323e684e41e702a8 (diff) |
Merge tag 'v1.8.1' into fiksgatami-dev
Diffstat (limited to 'perllib/FixMyStreet/EmailSend.pm')
-rw-r--r-- | perllib/FixMyStreet/EmailSend.pm | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/EmailSend.pm b/perllib/FixMyStreet/EmailSend.pm new file mode 100644 index 000000000..09f434931 --- /dev/null +++ b/perllib/FixMyStreet/EmailSend.pm @@ -0,0 +1,78 @@ +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::Variable', + mailer_args => $mailer_args, + }; +} else { + # Email::Send::Sendmail + $args = { mailer => 'Sendmail' }; +} + +sub new { + my ($cls, $hash) = @_; + $hash ||= {}; + my %args = ( %$args, %$hash ); + + my $sender = delete($args{env_from}); + if ($sender) { + $args{mailer_args} = [ @{$args{mailer_args}} ] if $args{mailer_args}; + push @{$args{mailer_args}}, env_from => $sender; + } + + return Email::Send->new(\%args); +} |