diff options
-rw-r--r-- | perllib/FixMyStreet/SendReport/Email.pm | 13 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport/Zurich.pm | 13 | ||||
-rw-r--r-- | perllib/FixMyStreet/TestMech.pm | 11 | ||||
-rw-r--r-- | t/cobrand/zurich.t | 2 |
4 files changed, 36 insertions, 3 deletions
diff --git a/perllib/FixMyStreet/SendReport/Email.pm b/perllib/FixMyStreet/SendReport/Email.pm index 6cd9afccd..09847cf5f 100644 --- a/perllib/FixMyStreet/SendReport/Email.pm +++ b/perllib/FixMyStreet/SendReport/Email.pm @@ -53,6 +53,15 @@ sub send_from { return [ $row->user->email, $row->name ]; } +sub envelope_sender { + my ($self, $row) = @_; + + if ($row->user->email && $row->user->email_verified) { + return FixMyStreet::Email::unique_verp_id('report', $row->id); + } + return FixMyStreet->config('DO_NOT_REPLY_EMAIL'); +} + sub send { my $self = shift; my ( $row, $h ) = @_; @@ -82,12 +91,10 @@ sub send { $params->{Bcc} = $self->bcc if @{$self->bcc}; - my $sender; + my $sender = $self->envelope_sender($row); if ($row->user->email && $row->user->email_verified) { - $sender = FixMyStreet::Email::unique_verp_id('report', $row->id); $params->{From} = $self->send_from( $row ); } else { - $sender = FixMyStreet->config('DO_NOT_REPLY_EMAIL'); my $name = sprintf(_("On behalf of %s"), @{ $self->send_from($row) }[1]); $params->{From} = [ $sender, $name ]; } diff --git a/perllib/FixMyStreet/SendReport/Zurich.pm b/perllib/FixMyStreet/SendReport/Zurich.pm index 7416c64f9..5d0592f40 100644 --- a/perllib/FixMyStreet/SendReport/Zurich.pm +++ b/perllib/FixMyStreet/SendReport/Zurich.pm @@ -78,4 +78,17 @@ sub send_from { return [ FixMyStreet->config('CONTACT_EMAIL'), FixMyStreet->config('CONTACT_NAME') ]; } +# For messages to external body, we also want the sender to be the +# category/body, so that bounces go there. +sub envelope_sender { + my ($self, $row) = @_; + + if ( $row->external_body ) { + my $from = $self->send_from($row); + return $from->[0]; + } + + return $self->SUPER::envelope_sender($row); +} + 1; diff --git a/perllib/FixMyStreet/TestMech.pm b/perllib/FixMyStreet/TestMech.pm index 16871d0f2..927e4556c 100644 --- a/perllib/FixMyStreet/TestMech.pm +++ b/perllib/FixMyStreet/TestMech.pm @@ -229,6 +229,17 @@ sub get_email { return $emails[0]; } +sub get_email_envelope { + my $mech = shift; + my @emails = FixMyStreet::Email::Sender->default_transport->deliveries; + @emails = map { $_->{envelope} } @emails; + + return @emails if wantarray; + + $mech->email_count_is(1) || return undef; + return $emails[0]; +} + sub get_text_body_from_email { my ($mech, $email, $obj) = @_; unless ($email) { diff --git a/t/cobrand/zurich.t b/t/cobrand/zurich.t index a08eb431e..d89c59f25 100644 --- a/t/cobrand/zurich.t +++ b/t/cobrand/zurich.t @@ -624,6 +624,8 @@ subtest "external report triggers email" => sub { $mech->content_contains($report->get_extra_metadata('public_response')) or die $mech->content; send_reports_for_zurich(); $email = $mech->get_email; + my $envelope = $mech->get_email_envelope; + is $envelope->{from}, 'division@example.org', 'Correct sender envelope'; like $email->header('Subject'), qr/Weitergeleitete Meldung/, 'subject looks okay'; like $email->header('To'), qr/external_body\@example.net/, 'to line looks correct'; like $email->body, qr/External Body/, 'body has right name'; |