Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commitf4254e6

Browse files
committed
[Mailer] fixed the possibility to set a From header from MessageListener
1 parent6c93002 commitf4254e6

File tree

4 files changed

+112
-42
lines changed

4 files changed

+112
-42
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Component\Mailer;
13+
14+
useSymfony\Component\Mailer\Exception\InvalidArgumentException;
15+
useSymfony\Component\Mailer\Exception\LogicException;
16+
useSymfony\Component\Mime\Address;
17+
useSymfony\Component\Mime\Header\Headers;
18+
useSymfony\Component\Mime\Message;
19+
useSymfony\Component\Mime\RawMessage;
20+
21+
/**
22+
* @author Fabien Potencier <fabien@symfony.com>
23+
*
24+
* @experimental in 4.3
25+
*
26+
* @internal
27+
*/
28+
finalclass DelayedSmtpEnvelopeextends SmtpEnvelope
29+
{
30+
private$senderSet =false;
31+
private$recipientsSet =false;
32+
private$message;
33+
34+
publicfunction__construct(RawMessage$message)
35+
{
36+
if (!$messageinstanceof Message) {
37+
// FIXME: parse the raw message to create the envelope?
38+
thrownewInvalidArgumentException(sprintf('Unable to create an SmtpEnvelope from a "%s" message.', RawMessage::class));
39+
}
40+
41+
$this->message =$message;
42+
}
43+
44+
publicfunctionsetSender(Address$sender):void
45+
{
46+
parent::setSender($sender);
47+
48+
$this->senderSet =true;
49+
}
50+
51+
publicfunctiongetSender():Address
52+
{
53+
if ($this->senderSet) {
54+
returnparent::getSender();
55+
}
56+
57+
returnself::getSenderFromHeaders($this->message->getHeaders());
58+
}
59+
60+
publicfunctionsetRecipients(array$recipients):void
61+
{
62+
parent::setRecipients($recipients);
63+
64+
$this->recipientsSet =parent::getRecipients();
65+
}
66+
67+
/**
68+
* @return Address[]
69+
*/
70+
publicfunctiongetRecipients():array
71+
{
72+
if ($this->recipientsSet) {
73+
returnparent::getRecipients();
74+
}
75+
76+
returnself::getRecipientsFromHeaders($this->message->getHeaders());
77+
}
78+
79+
privatestaticfunctiongetRecipientsFromHeaders(Headers$headers):array
80+
{
81+
$recipients = [];
82+
foreach (['to','cc','bcc']as$name) {
83+
foreach ($headers->getAll($name)as$header) {
84+
$recipients =array_merge($recipients,$header->getAddresses());
85+
}
86+
}
87+
88+
return$recipients;
89+
}
90+
91+
privatestaticfunctiongetSenderFromHeaders(Headers$headers):Address
92+
{
93+
if ($return =$headers->get('Return-Path')) {
94+
return$return->getAddress();
95+
}
96+
if ($sender =$headers->get('Sender')) {
97+
return$sender->getAddress();
98+
}
99+
if ($from =$headers->get('From')) {
100+
return$from->getAddresses()[0];
101+
}
102+
103+
thrownewLogicException('Unable to determine the sender of the message.');
104+
}
105+
}

‎src/Symfony/Component/Mailer/SmtpEnvelope.php‎

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
namespaceSymfony\Component\Mailer;
1313

1414
useSymfony\Component\Mailer\Exception\InvalidArgumentException;
15-
useSymfony\Component\Mailer\Exception\LogicException;
1615
useSymfony\Component\Mime\Address;
17-
useSymfony\Component\Mime\Header\Headers;
18-
useSymfony\Component\Mime\Message;
1916
useSymfony\Component\Mime\NamedAddress;
2017
useSymfony\Component\Mime\RawMessage;
2118

@@ -40,14 +37,7 @@ public function __construct(Address $sender, array $recipients)
4037

4138
publicstaticfunctioncreate(RawMessage$message):self
4239
{
43-
if ($messageinstanceof Message) {
44-
$headers =$message->getHeaders();
45-
46-
returnnewself(self::getSenderFromHeaders($headers),self::getRecipientsFromHeaders($headers));
47-
}
48-
49-
// FIXME: parse the raw message to create the envelope?
50-
thrownewInvalidArgumentException(sprintf('Unable to create an SmtpEnvelope from a "%s" message.', RawMessage::class));
40+
returnnewDelayedSmtpEnvelope($message);
5141
}
5242

5343
publicfunctionsetSender(Address$sender):void
@@ -84,31 +74,4 @@ public function getRecipients(): array
8474
{
8575
return$this->recipients;
8676
}
87-
88-
privatestaticfunctiongetRecipientsFromHeaders(Headers$headers):array
89-
{
90-
$recipients = [];
91-
foreach (['to','cc','bcc']as$name) {
92-
foreach ($headers->getAll($name)as$header) {
93-
$recipients =array_merge($recipients,$header->getAddresses());
94-
}
95-
}
96-
97-
return$recipients;
98-
}
99-
100-
privatestaticfunctiongetSenderFromHeaders(Headers$headers):Address
101-
{
102-
if ($return =$headers->get('Return-Path')) {
103-
return$return->getAddress();
104-
}
105-
if ($sender =$headers->get('Sender')) {
106-
return$sender->getAddress();
107-
}
108-
if ($from =$headers->get('From')) {
109-
return$from->getAddresses()[0];
110-
}
111-
112-
thrownewLogicException('Unable to determine the sender of the message.');
113-
}
11477
}

‎src/Symfony/Component/Mailer/Tests/SmtpEnvelopeTest.php‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,13 @@ public function testSenderFromHeaders()
7272
$this->assertEquals('from@symfony.com',$e->getSender()->getAddress());
7373
}
7474

75-
publicfunctiontestSenderFromHeadersWithoutData()
75+
publicfunctiontestSenderFromHeadersWithoutFrom()
7676
{
77-
$this->expectException(\LogicException::class);
7877
$headers =newHeaders();
7978
$headers->addMailboxListHeader('To', ['from@symfony.com']);
80-
SmtpEnvelope::create(newMessage($headers));
79+
$e = SmtpEnvelope::create($message =newMessage($headers));
80+
$message->getHeaders()->addMailboxListHeader('From', ['from@symfony.com']);
81+
$this->assertEquals('from@symfony.com',$e->getSender()->getAddress());
8182
}
8283

8384
publicfunctiontestRecipientsFromHeaders()

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
usePsr\Log\NullLogger;
1616
useSymfony\Component\EventDispatcher\EventDispatcher;
1717
useSymfony\Component\EventDispatcher\EventDispatcherInterface;
18+
useSymfony\Component\Mailer\DelayedSmtpEnvelope;
1819
useSymfony\Component\Mailer\Event\MessageEvent;
1920
useSymfony\Component\Mailer\Exception\TransportException;
2021
useSymfony\Component\Mailer\SentMessage;
@@ -62,7 +63,7 @@ public function send(RawMessage $message, SmtpEnvelope $envelope = null): ?SentM
6263
$envelope =clone$envelope;
6364
}else {
6465
try {
65-
$envelope =SmtpEnvelope::create($message);
66+
$envelope =newDelayedSmtpEnvelope($message);
6667
}catch (\Exception$e) {
6768
thrownewTransportException('Cannot send message without a valid envelope.',0,$e);
6869
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp