aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/SendReport/Email.pm13
-rw-r--r--perllib/FixMyStreet/SendReport/Zurich.pm13
-rw-r--r--perllib/FixMyStreet/TestMech.pm11
-rw-r--r--t/cobrand/zurich.t2
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';