aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arc.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arc.h')
0 files changed, 0 insertions, 0 deletions
n15' href='#n15'>15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 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);
}