Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 77f595f

Browse files
author
Clara van Miert
committed
[Mailer] Reorder headers used to determine Sender
Use the `Return-Path` header as the last candidate to determine the Envelope's sender address. The `Return-Path` is usually configured _in addition_ to the `Sender` and/or `From` header: it allows for email bounces and complaints to be sent to a dedicated email address. It should therefor not be used as the first candidate header to determine the sender.
1 parent 88bf721 commit 77f595f

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/Symfony/Component/Mailer/DelayedEnvelope.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ private static function getRecipientsFromHeaders(Headers $headers): array
8383

8484
private static function getSenderFromHeaders(Headers $headers): Address
8585
{
86-
if ($return = $headers->get('Return-Path')) {
87-
return $return->getAddress();
88-
}
8986
if ($sender = $headers->get('Sender')) {
9087
return $sender->getAddress();
9188
}
9289
if ($from = $headers->get('From')) {
9390
return $from->getAddresses()[0];
9491
}
92+
if ($return = $headers->get('Return-Path')) {
93+
return $return->getAddress();
94+
}
9595

9696
throw new LogicException('Unable to determine the sender of the message.');
9797
}

src/Symfony/Component/Mailer/Tests/EnvelopeTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,24 @@ public function testSenderFromHeadersWithoutFrom()
8181
$this->assertEquals($from, $e->getSender());
8282
}
8383

84+
public function testSenderFromHeadersWithMulitpleHeaders()
85+
{
86+
$headers = new Headers();
87+
$headers->addMailboxListHeader('From', [$from = new Address('[email protected]', 'from'), '[email protected]']);
88+
$headers->addPathHeader('Return-Path', $return = new Address('[email protected]', 'return'));
89+
$headers->addMailboxHeader('Sender', $sender = new Address('[email protected]', 'sender'));
90+
$headers->addMailboxListHeader('To', ['[email protected]']);
91+
$e = Envelope::create(new Message($headers));
92+
$this->assertEquals($sender, $e->getSender());
93+
94+
$headers = new Headers();
95+
$headers->addMailboxListHeader('From', [$from = new Address('[email protected]', 'from'), '[email protected]']);
96+
$headers->addPathHeader('Return-Path', $return = new Address('[email protected]', 'return'));
97+
$headers->addMailboxListHeader('To', ['[email protected]']);
98+
$e = Envelope::create(new Message($headers));
99+
$this->assertEquals($from, $e->getSender());
100+
}
101+
84102
public function testRecipientsFromHeaders()
85103
{
86104
$headers = new Headers();

0 commit comments

Comments
 (0)