diff --git a/src/Symfony/Component/Mime/Email.php b/src/Symfony/Component/Mime/Email.php index 346618cf252ca..797e0028f6c4f 100644 --- a/src/Symfony/Component/Mime/Email.php +++ b/src/Symfony/Component/Mime/Email.php @@ -416,7 +416,7 @@ public function ensureValidity() private function ensureBodyValid(): void { - if (null === $this->text && null === $this->html && !$this->attachments) { + if (null === $this->text && null === $this->html && !$this->attachments && null === parent::getBody()) { throw new LogicException('A message must have a text or an HTML part or attachments.'); } } diff --git a/src/Symfony/Component/Mime/Tests/EmailTest.php b/src/Symfony/Component/Mime/Tests/EmailTest.php index ae61f26f605b4..3aa86c5f94623 100644 --- a/src/Symfony/Component/Mime/Tests/EmailTest.php +++ b/src/Symfony/Component/Mime/Tests/EmailTest.php @@ -695,4 +695,60 @@ public function testEmailsWithAttachmentsWhichAreAFileInstanceCanBeUnserialized( $this->assertCount(1, $attachments); $this->assertStringContainsString('foo_bar_xyz_123', $attachments[0]->getBody()); } + + public function testInvalidBodyWithEmptyEmail() + { + $this->expectException(\LogicException::class); + $this->expectExceptionMessage('A message must have a text or an HTML part or attachments.'); + + (new Email())->ensureValidity(); + } + + public function testBodyWithTextIsValid() + { + $email = new Email(); + $email->to('test@example.com') + ->from('test@example.com') + ->text('foo'); + + $email->ensureValidity(); + + $this->expectNotToPerformAssertions(); + } + + public function testBodyWithHtmlIsValid() + { + $email = new Email(); + $email->to('test@example.com') + ->from('test@example.com') + ->html('foo'); + + $email->ensureValidity(); + + $this->expectNotToPerformAssertions(); + } + + public function testEmptyBodyWithAttachmentsIsValid() + { + $email = new Email(); + $email->to('test@example.com') + ->from('test@example.com') + ->addPart(new DataPart('foo')); + + $email->ensureValidity(); + + $this->expectNotToPerformAssertions(); + } + + public function testSetBodyIsValid() + { + $email = new Email(); + $email->to('test@example.com') + ->from('test@example.com') + ->setBody(new TextPart('foo')); + + $email->ensureValidity(); + + $this->expectNotToPerformAssertions(); + } }