aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/EmailSend.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/EmailSend.pm')
-rw-r--r--perllib/FixMyStreet/EmailSend.pm70
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);
+}