diff --git a/src/Service/Mailer.php b/src/Service/Mailer.php index 7c6818b5b..5151a5f05 100644 --- a/src/Service/Mailer.php +++ b/src/Service/Mailer.php @@ -93,6 +93,7 @@ public function sendCommentReportedFeedbackEmail(Member $member, $parameters): b { $parameters['sender'] = $member; $parameters['receiver'] = $member; + $parameters['reporterEmail'] = $member->getEmail(); $feedbackCategoryRepository = $this->entityManager->getRepository(FeedbackCategory::class); $feedbackCategory = $feedbackCategoryRepository->findOneBy(['name' => 'Comment_issue']); @@ -101,7 +102,6 @@ public function sendCommentReportedFeedbackEmail(Member $member, $parameters): b new Address($feedbackCategory->getEmailToNotify(), 'Comment Issue'), 'comment.feedback', $parameters, - $member->getEmail(), ); } @@ -149,7 +149,9 @@ public function sendNotificationEmail(Address $sender, Member $receiver, $parame /** * Sends contact/feedback form submissions to the helpdesk queue. - * From: is always noreply@bewelcome.org to pass DMARC; the reporter's address goes in Reply-To. + * From: noreply@bewelcome.org (passes DMARC). No Reply-To — freemail in Reply-To triggers + * SPOOF_REPLYTO+FREEMAIL_REPLYTO_NEQ_FROM in rspamd, scoring ~8 pts and routing to Junk. + * The reporter's address is already rendered in the email body by feedback.html.twig. */ public function sendFeedbackEmail($sender, Address $receiver, $parameters): bool { @@ -161,7 +163,6 @@ public function sendFeedbackEmail($sender, Address $receiver, $parameters): bool $receiver, 'feedback', $parameters, - \is_string($sender) ? $sender : null, ); } diff --git a/templates/emails/comment.feedback.html.twig b/templates/emails/comment.feedback.html.twig index 454f8c35c..f63478c5e 100644 --- a/templates/emails/comment.feedback.html.twig +++ b/templates/emails/comment.feedback.html.twig @@ -1,7 +1,7 @@ {% extends 'emails/email.html.twig' %} {% block content%} -
The user {{ comment.toMember.username }} provided feedback for a comment:
+The user {{ comment.toMember.username }} ({{ reporterEmail }}) provided feedback for a comment:
{{ feedback }}
Please check the comment here: Comment from {{ comment.fromMember.username }}
{% endblock content %} diff --git a/tests/Service/MailerTest.php b/tests/Service/MailerTest.php index 8f6561a2e..c1997b584 100644 --- a/tests/Service/MailerTest.php +++ b/tests/Service/MailerTest.php @@ -72,9 +72,7 @@ public function testSendFeedbackEmailUsesNoreplyAsFrom(): void $this->assertCount(1, $from); $this->assertSame('noreply@bewelcome.org', $from[0]->getAddress(), 'From must be noreply to pass DMARC'); - $replyTo = $captured->getReplyTo(); - $this->assertCount(1, $replyTo); - $this->assertSame('reporter@yahoo.fr', $replyTo[0]->getAddress(), 'Reply-To must be the reporter so staff can reply'); + $this->assertEmpty($captured->getReplyTo(), 'No Reply-To: freemail Reply-To triggers SPOOF_REPLYTO in rspamd and routes to Junk'); } public function testSendFeedbackEmailNullFallbackUsesNoreplyWithNoReplyTo(): void @@ -155,8 +153,6 @@ public function testSendCommentReportedFeedbackEmailUsesNoreplyAsFrom(): void $this->assertCount(1, $from); $this->assertSame('noreply@bewelcome.org', $from[0]->getAddress(), 'From must be noreply to pass DMARC'); - $replyTo = $captured->getReplyTo(); - $this->assertCount(1, $replyTo); - $this->assertSame('member@gmail.com', $replyTo[0]->getAddress(), 'Reply-To must be the member so staff can reply'); + $this->assertEmpty($captured->getReplyTo(), 'No Reply-To: freemail Reply-To triggers SPOOF_REPLYTO in rspamd and routes to Junk'); } }