[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 therefore not be used as the first candidate header to determine the sender.
This commit is contained in:
parent
88bf7211a9
commit
7e60a8f8c9
@ -83,15 +83,15 @@ final class DelayedEnvelope extends Envelope
|
||||
|
||||
private static function getSenderFromHeaders(Headers $headers): Address
|
||||
{
|
||||
if ($return = $headers->get('Return-Path')) {
|
||||
return $return->getAddress();
|
||||
}
|
||||
if ($sender = $headers->get('Sender')) {
|
||||
return $sender->getAddress();
|
||||
}
|
||||
if ($from = $headers->get('From')) {
|
||||
return $from->getAddresses()[0];
|
||||
}
|
||||
if ($return = $headers->get('Return-Path')) {
|
||||
return $return->getAddress();
|
||||
}
|
||||
|
||||
throw new LogicException('Unable to determine the sender of the message.');
|
||||
}
|
||||
|
@ -81,6 +81,24 @@ class EnvelopeTest extends TestCase
|
||||
$this->assertEquals($from, $e->getSender());
|
||||
}
|
||||
|
||||
public function testSenderFromHeadersWithMulitpleHeaders()
|
||||
{
|
||||
$headers = new Headers();
|
||||
$headers->addMailboxListHeader('From', [$from = new Address('from@symfony.com', 'from'), 'some@symfony.com']);
|
||||
$headers->addPathHeader('Return-Path', $return = new Address('return@symfony.com', 'return'));
|
||||
$headers->addMailboxHeader('Sender', $sender = new Address('sender@symfony.com', 'sender'));
|
||||
$headers->addMailboxListHeader('To', ['to@symfony.com']);
|
||||
$e = Envelope::create(new Message($headers));
|
||||
$this->assertEquals($sender, $e->getSender());
|
||||
|
||||
$headers = new Headers();
|
||||
$headers->addMailboxListHeader('From', [$from = new Address('from@symfony.com', 'from'), 'some@symfony.com']);
|
||||
$headers->addPathHeader('Return-Path', $return = new Address('return@symfony.com', 'return'));
|
||||
$headers->addMailboxListHeader('To', ['to@symfony.com']);
|
||||
$e = Envelope::create(new Message($headers));
|
||||
$this->assertEquals($from, $e->getSender());
|
||||
}
|
||||
|
||||
public function testRecipientsFromHeaders()
|
||||
{
|
||||
$headers = new Headers();
|
||||
|
Reference in New Issue
Block a user