[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:
Clara van Miert 2020-08-19 17:08:06 +02:00
parent 88bf7211a9
commit 7e60a8f8c9
No known key found for this signature in database
GPG Key ID: A91CFBBDCBBA4509
2 changed files with 21 additions and 3 deletions

View File

@ -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.');
}

View File

@ -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();