Skip to content

Commit cc6c14f

Browse files
committed
fix: support SmsMessage with 'from' set
Fixes `Error Email does not comply with addr-spec of RFC 2822` See: #58535
1 parent 7b4ec02 commit cc6c14f

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

src/Symfony/Component/Notifier/Bridge/FakeSms/FakeSmsEmailTransport.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function supports(MessageInterface $message): bool
5454
}
5555

5656
/**
57-
* @param MessageInterface|SmsMessage $message
57+
* @param MessageInterface $message
5858
*
5959
* @throws TransportExceptionInterface
6060
*/
@@ -64,10 +64,12 @@ protected function doSend(MessageInterface $message): SentMessage
6464
throw new UnsupportedMessageTypeException(__CLASS__, SmsMessage::class, $message);
6565
}
6666

67+
\assert($message instanceof SmsMessage); // to keep psalm happy
68+
6769
$email = (new Email())
68-
->from($message->getFrom() ?: $this->from)
70+
->from($this->from)
6971
->to($this->to)
70-
->subject(sprintf('New SMS on phone number: %s', $message->getPhone()))
72+
->subject('New SMS to phone number ' . $message->getPhone() . ($message->getFrom() ? ' from ' . $message->getFrom() : ''))
7173
->html($message->getSubject())
7274
->text($message->getSubject());
7375

src/Symfony/Component/Notifier/Bridge/FakeSms/FakeSmsLoggerTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ protected function doSend(MessageInterface $message): SentMessage
5555
throw new UnsupportedMessageTypeException(__CLASS__, SmsMessage::class, $message);
5656
}
5757

58-
$this->logger->info(sprintf('New SMS on phone number: %s', $message->getPhone()));
58+
$this->logger->info('New SMS to phone number ' . $message->getPhone() . ($message->getFrom() ? ' from ' . $message->getFrom() : ''));
5959

6060
return new SentMessage($message, (string) $this);
6161
}

src/Symfony/Component/Notifier/Bridge/FakeSms/Tests/FakeSmsEmailTransportTest.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,30 @@ public function testSendWithDefaultTransport()
7070
$this->assertInstanceOf(Email::class, $sentEmail);
7171
$this->assertSame($to, $sentEmail->getTo()[0]->getEncodedAddress());
7272
$this->assertSame($from, $sentEmail->getFrom()[0]->getEncodedAddress());
73-
$this->assertSame(sprintf('New SMS on phone number: %s', $phone), $sentEmail->getSubject());
73+
$this->assertSame(\sprintf('New SMS to phone number %s', $phone), $sentEmail->getSubject());
74+
$this->assertSame($subject, $sentEmail->getTextBody());
75+
$this->assertFalse($sentEmail->getHeaders()->has('X-Transport'));
76+
}
77+
78+
public function testSendWithFrom()
79+
{
80+
$transportName = null;
81+
82+
$message = new SmsMessage($phone = '0611223344', $subject = 'Hello!', $fromPhone = '0655667788');
83+
84+
$mailer = new DummyMailer();
85+
86+
$transport = (new FakeSmsEmailTransport($mailer, $to = 'recipient@email.net', $from = 'sender@email.net'));
87+
$transport->setHost($transportName);
88+
89+
$transport->send($message);
90+
91+
/** @var Email $sentEmail */
92+
$sentEmail = $mailer->getSentEmail();
93+
$this->assertInstanceOf(Email::class, $sentEmail);
94+
$this->assertSame($to, $sentEmail->getTo()[0]->getEncodedAddress());
95+
$this->assertSame($from, $sentEmail->getFrom()[0]->getEncodedAddress());
96+
$this->assertSame(\sprintf('New SMS to phone number %s from %s', $phone, $fromPhone), $sentEmail->getSubject());
7497
$this->assertSame($subject, $sentEmail->getTextBody());
7598
$this->assertFalse($sentEmail->getHeaders()->has('X-Transport'));
7699
}
@@ -93,7 +116,7 @@ public function testSendWithCustomTransport()
93116
$this->assertInstanceOf(Email::class, $sentEmail);
94117
$this->assertSame($to, $sentEmail->getTo()[0]->getEncodedAddress());
95118
$this->assertSame($from, $sentEmail->getFrom()[0]->getEncodedAddress());
96-
$this->assertSame(sprintf('New SMS on phone number: %s', $phone), $sentEmail->getSubject());
119+
$this->assertSame(\sprintf('New SMS to phone number %s', $phone), $sentEmail->getSubject());
97120
$this->assertSame($subject, $sentEmail->getTextBody());
98121
$this->assertTrue($sentEmail->getHeaders()->has('X-Transport'));
99122
$this->assertSame($transportName, $sentEmail->getHeaders()->get('X-Transport')->getBody());

src/Symfony/Component/Notifier/Bridge/FakeSms/Tests/FakeSmsLoggerTransportTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function testSendWithDefaultTransport()
6161
$this->assertNotEmpty($logs);
6262

6363
$log = $logs[0];
64-
$this->assertSame(sprintf('New SMS on phone number: %s', $phone), $log['message']);
64+
$this->assertSame(\sprintf('New SMS to phone number %s', $phone), $log['message']);
6565
$this->assertSame('info', $log['level']);
6666
}
6767
}

0 commit comments

Comments
 (0)