Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e885860

Browse filesBrowse files
committed
Fix From/Sender handling in Emails
1 parent 14a2046 commit e885860
Copy full SHA for e885860

File tree

7 files changed

+38
-24
lines changed
Filter options

7 files changed

+38
-24
lines changed

‎src/Symfony/Component/Mailer/EventListener/EnvelopeListener.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/EventListener/EnvelopeListener.php
+8Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1515
use Symfony\Component\Mailer\Event\MessageEvent;
1616
use Symfony\Component\Mime\Address;
17+
use Symfony\Component\Mime\Message;
1718

1819
/**
1920
* Manipulates the Envelope of a Message.
@@ -43,6 +44,13 @@ public function onMessage(MessageEvent $event): void
4344
{
4445
if ($this->sender) {
4546
$event->getEnvelope()->setSender($this->sender);
47+
48+
$message = $event->getMessage();
49+
if ($message instanceof Message) {
50+
if (!$message->getHeaders()->has('Sender') && !$message->getHeaders()->has('From')) {
51+
$message->getHeaders()->addMailboxHeader('Sender', $this->sender->getAddress());
52+
}
53+
}
4654
}
4755

4856
if ($this->recipients) {

‎src/Symfony/Component/Mailer/Transport/AbstractTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Transport/AbstractTransport.php
-4Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,6 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa
6363
$envelope = $event->getEnvelope();
6464
}
6565

66-
if (!$envelope->getRecipients()) {
67-
return null;
68-
}
69-
7066
$message = new SentMessage($message, $envelope);
7167
$this->doSend($message);
7268

‎src/Symfony/Component/Mime/Message.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mime/Message.php
+11-4Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ public function getPreparedHeaders(): Headers
7474
$headers = clone $this->headers;
7575

7676
if (!$headers->has('From')) {
77-
throw new LogicException('An email must have a "From" header.');
77+
if (!$headers->has('Sender')) {
78+
throw new LogicException('An email must have a "From" or a "Sender" header.');
79+
}
80+
$headers->addMailboxListHeader('From', [$headers->get('Sender')->getAddress()]);
7881
}
7982

8083
$headers->addTextHeader('MIME-Version', '1.0');
@@ -119,8 +122,12 @@ public function toIterable(): iterable
119122

120123
public function ensureValidity()
121124
{
122-
if (!$this->headers->has('From')) {
123-
throw new LogicException('An email must have a "From" header.');
125+
if (!$this->headers->has('To')) {
126+
throw new LogicException('An email must have a "To" header.');
127+
}
128+
129+
if (!$this->headers->has('From') && !$this->headers->has('Sender')) {
130+
throw new LogicException('An email must have a "From" or a "Sender" header.');
124131
}
125132

126133
parent::ensureValidity();
@@ -133,7 +140,7 @@ public function generateMessageId(): string
133140
} elseif ($this->headers->has('From')) {
134141
$sender = $this->headers->get('From')->getAddresses()[0];
135142
} else {
136-
throw new LogicException('An email must have a "From" or a "Sender" header to compute a Messsage ID.');
143+
throw new LogicException('An email must have a "From" or a "Sender" header.');
137144
}
138145

139146
return bin2hex(random_bytes(16)).strstr($sender->getAddress(), '@');

‎src/Symfony/Component/Mime/Tests/Crypto/SMimeSignerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mime/Tests/Crypto/SMimeSignerTest.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public function testSignedMessageWithBcc()
9999
{
100100
$message = (new Email())
101101
->date(new \DateTime('2019-04-07 10:36:30', new \DateTimeZone('Europe/Paris')))
102+
->to('fabien@symfony.com')
102103
->addBcc('fabien@symfony.com', 's.stok@rollerscapes.net')
103104
->subject('I am your sign of fear')
104105
->from('noreply@example.com')
@@ -115,8 +116,9 @@ public function testSignedMessageWithAttachments()
115116
$message = new Email((new Headers())
116117
->addDateHeader('Date', new \DateTime('2019-04-07 10:36:30', new \DateTimeZone('Europe/Paris')))
117118
->addMailboxListHeader('From', ['fabien@symfony.com'])
119+
->addMailboxListHeader('To', ['fabien@symfony.com'])
118120
);
119-
$message->html($content = 'html content <img src="cid:test.gif">');
121+
$message->html('html content <img src="cid:test.gif">');
120122
$message->text('text content');
121123
$message->attach(fopen(__DIR__.'/../Fixtures/mimetypes/test', 'r'));
122124
$message->attach(fopen(__DIR__.'/../Fixtures/mimetypes/test.gif', 'r'), 'test.gif');

‎src/Symfony/Component/Mime/Tests/EmailTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mime/Tests/EmailTest.php
+14-13Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -251,70 +251,70 @@ public function testGenerateBody()
251251
$att = new DataPart($file = fopen(__DIR__.'/Fixtures/mimetypes/test', 'r'));
252252
$img = new DataPart($image = fopen(__DIR__.'/Fixtures/mimetypes/test.gif', 'r'), 'test.gif');
253253

254-
$e = (new Email())->from('me@example.com');
254+
$e = (new Email())->from('me@example.com')->to('you@example.com');
255255
$e->text('text content');
256256
$this->assertEquals($text, $e->getBody());
257257
$this->assertEquals('text content', $e->getTextBody());
258258

259-
$e = (new Email())->from('me@example.com');
259+
$e = (new Email())->from('me@example.com')->to('you@example.com');
260260
$e->html('html content');
261261
$this->assertEquals($html, $e->getBody());
262262
$this->assertEquals('html content', $e->getHtmlBody());
263263

264-
$e = (new Email())->from('me@example.com');
264+
$e = (new Email())->from('me@example.com')->to('you@example.com');
265265
$e->html('html content');
266266
$e->text('text content');
267267
$this->assertEquals(new AlternativePart($text, $html), $e->getBody());
268268

269-
$e = (new Email())->from('me@example.com');
269+
$e = (new Email())->from('me@example.com')->to('you@example.com');
270270
$e->html('html content', 'iso-8859-1');
271271
$e->text('text content', 'iso-8859-1');
272272
$this->assertEquals('iso-8859-1', $e->getTextCharset());
273273
$this->assertEquals('iso-8859-1', $e->getHtmlCharset());
274274
$this->assertEquals(new AlternativePart(new TextPart('text content', 'iso-8859-1'), new TextPart('html content', 'iso-8859-1', 'html')), $e->getBody());
275275

276-
$e = (new Email())->from('me@example.com');
276+
$e = (new Email())->from('me@example.com')->to('you@example.com');
277277
$e->attach($file);
278278
$e->text('text content');
279279
$this->assertEquals(new MixedPart($text, $att), $e->getBody());
280280

281-
$e = (new Email())->from('me@example.com');
281+
$e = (new Email())->from('me@example.com')->to('you@example.com');
282282
$e->attach($file);
283283
$e->html('html content');
284284
$this->assertEquals(new MixedPart($html, $att), $e->getBody());
285285

286-
$e = (new Email())->from('me@example.com');
286+
$e = (new Email())->from('me@example.com')->to('you@example.com');
287287
$e->attach($file);
288288
$this->assertEquals(new MixedPart($att), $e->getBody());
289289

290-
$e = (new Email())->from('me@example.com');
290+
$e = (new Email())->from('me@example.com')->to('you@example.com');
291291
$e->html('html content');
292292
$e->text('text content');
293293
$e->attach($file);
294294
$this->assertEquals(new MixedPart(new AlternativePart($text, $html), $att), $e->getBody());
295295

296-
$e = (new Email())->from('me@example.com');
296+
$e = (new Email())->from('me@example.com')->to('you@example.com');
297297
$e->html('html content');
298298
$e->text('text content');
299299
$e->attach($file);
300300
$e->attach($image, 'test.gif');
301301
$this->assertEquals(new MixedPart(new AlternativePart($text, $html), $att, $img), $e->getBody());
302302

303-
$e = (new Email())->from('me@example.com');
303+
$e = (new Email())->from('me@example.com')->to('you@example.com');
304304
$e->text('text content');
305305
$e->attach($file);
306306
$e->attach($image, 'test.gif');
307307
$this->assertEquals(new MixedPart($text, $att, $img), $e->getBody());
308308

309-
$e = (new Email())->from('me@example.com');
309+
$e = (new Email())->from('me@example.com')->to('you@example.com');
310310
$e->html($content = 'html content <img src="test.gif">');
311311
$e->text('text content');
312312
$e->attach($file);
313313
$e->attach($image, 'test.gif');
314314
$fullhtml = new TextPart($content, 'utf-8', 'html');
315315
$this->assertEquals(new MixedPart(new AlternativePart($text, $fullhtml), $att, $img), $e->getBody());
316316

317-
$e = (new Email())->from('me@example.com');
317+
$e = (new Email())->from('me@example.com')->to('you@example.com');
318318
$e->html($content = 'html content <img src="cid:test.gif">');
319319
$e->text('text content');
320320
$e->attach($file);
@@ -334,7 +334,7 @@ public function testGenerateBody()
334334
fwrite($r, $content);
335335
rewind($r);
336336

337-
$e = (new Email())->from('me@example.com');
337+
$e = (new Email())->from('me@example.com')->to('you@example.com');
338338
$e->html($r);
339339
// embedding the same image twice results in one image only in the email
340340
$e->embed($image, 'test.gif');
@@ -373,6 +373,7 @@ public function testSerialize()
373373

374374
$e = new Email();
375375
$e->from('fabien@symfony.com');
376+
$e->to('you@example.com');
376377
$e->text($r);
377378
$e->html($r);
378379
$name = __DIR__.'/Fixtures/mimetypes/test';

‎src/Symfony/Component/Mime/Tests/MessageConverterTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mime/Tests/MessageConverterTest.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class MessageConverterTest extends TestCase
2121
public function testToEmail()
2222
{
2323
$file = file_get_contents(__DIR__.'/Fixtures/mimetypes/test.gif');
24-
$email = (new Email())->from('fabien@symfony.com');
24+
$email = (new Email())->from('fabien@symfony.com')->to('you@example.com');
2525
$this->assertSame($email, MessageConverter::toEmail($email));
2626

2727
$this->assertConversion((clone $email)->text('text content'));

‎src/Symfony/Component/Mime/Tests/Part/MessagePartTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mime/Tests/Part/MessagePartTest.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class MessagePartTest extends TestCase
2222
{
2323
public function testConstructor()
2424
{
25-
$p = new MessagePart((new Email())->from('fabien@symfony.com')->text('content'));
25+
$p = new MessagePart((new Email())->from('fabien@symfony.com')->to('you@example.com')->text('content'));
2626
$this->assertStringContainsString('content', $p->getBody());
2727
$this->assertStringContainsString('content', $p->bodyToString());
2828
$this->assertStringContainsString('content', implode('', iterator_to_array($p->bodyToIterable())));

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.