Skip to content

Commit cacb478

Browse files
Merge branch '5.4' into 6.3
* 5.4: [Translation] Fix `TranslationNodeVisitor` with constant domain [Messenger] [AMQP] Throw exception on `nack` callback [Validator] revise Latvian translations [ErrorHandler] Fix `RecursiveDirectoryIterator` exception with wrong composer autoload [HttpFoundation] Request without content-type or content-length header should result in null values, not empty strings [Cache] Fix possible infinite loop in `CachePoolPass` [Mime] Fix undefined array key 0 when empty sender [Console] Allow '0' as a $shortcut in InputOption.php fix multi-byte code area to convert [Validator] Make it explicit when English translation differs from its resource name
2 parents d5179ee + f2b8160 commit cacb478

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

Email.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ public function addFrom(Address|string ...$addresses): static
120120
*/
121121
public function from(Address|string ...$addresses): static
122122
{
123+
if (!$addresses) {
124+
throw new LogicException('"from()" must be called with at least one address.');
125+
}
126+
123127
return $this->setListAddressHeaderBody('From', $addresses);
124128
}
125129

Message.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,10 @@ public function generateMessageId(): string
146146
if ($this->headers->has('Sender')) {
147147
$sender = $this->headers->get('Sender')->getAddress();
148148
} elseif ($this->headers->has('From')) {
149-
$sender = $this->headers->get('From')->getAddresses()[0];
149+
if (!$froms = $this->headers->get('From')->getAddresses()) {
150+
throw new LogicException('A "From" header must have at least one email address.');
151+
}
152+
$sender = $froms[0];
150153
} else {
151154
throw new LogicException('An email must have a "From" or a "Sender" header.');
152155
}

Tests/EmailTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPUnit\Framework\TestCase;
1616
use Symfony\Component\Mime\Address;
1717
use Symfony\Component\Mime\Email;
18+
use Symfony\Component\Mime\Exception\LogicException;
1819
use Symfony\Component\Mime\Part\DataPart;
1920
use Symfony\Component\Mime\Part\File;
2021
use Symfony\Component\Mime\Part\Multipart\AlternativePart;
@@ -63,6 +64,13 @@ public function testSender()
6364
$this->assertSame($fabien, $e->getSender());
6465
}
6566

67+
public function testFromWithNoAddress()
68+
{
69+
$e = new Email();
70+
$this->expectException(LogicException::class);
71+
$e->from();
72+
}
73+
6674
public function testFrom()
6775
{
6876
$e = new Email();

Tests/MessageTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mime\Address;
16+
use Symfony\Component\Mime\Exception\LogicException;
1617
use Symfony\Component\Mime\Header\Headers;
1718
use Symfony\Component\Mime\Header\MailboxListHeader;
1819
use Symfony\Component\Mime\Header\UnstructuredHeader;
@@ -125,6 +126,14 @@ public function testGetPreparedHeadersHasSenderWhenNeeded()
125126
$this->assertEquals('[email protected]', $message->getPreparedHeaders()->get('Sender')->getAddress()->getAddress());
126127
}
127128

129+
public function testGenerateMessageIdThrowsWhenHasFromButNoAddresses()
130+
{
131+
$message = new Message();
132+
$message->getHeaders()->addMailboxListHeader('From', []);
133+
$this->expectException(LogicException::class);
134+
$message->generateMessageId();
135+
}
136+
128137
public function testToString()
129138
{
130139
$message = new Message();

0 commit comments

Comments
 (0)