diff --git a/src/Symfony/Component/Mime/RawMessage.php b/src/Symfony/Component/Mime/RawMessage.php index 484ffb0073f6a..2b1b52cde1226 100644 --- a/src/Symfony/Component/Mime/RawMessage.php +++ b/src/Symfony/Component/Mime/RawMessage.php @@ -18,11 +18,14 @@ */ class RawMessage { - /** @var iterable|string|resource */ + /** @var iterable|string|resource */ private $message; private bool $isGeneratorClosed; - public function __construct(iterable|string $message) + /** + * @param iterable|string|resource $message + */ + public function __construct(mixed $message) { $this->message = $message; } diff --git a/src/Symfony/Component/Mime/Tests/RawMessageTest.php b/src/Symfony/Component/Mime/Tests/RawMessageTest.php index fa802f4710fc5..cfd97a5f4a2e8 100644 --- a/src/Symfony/Component/Mime/Tests/RawMessageTest.php +++ b/src/Symfony/Component/Mime/Tests/RawMessageTest.php @@ -80,6 +80,25 @@ public function testToIterableLegacy(mixed $messageParameter, bool $supportReuse } } + public function testToIterableOnResourceRewindsAndYieldsLines() + { + $handle = \fopen('php://memory', 'r+'); + \fwrite($handle, "line1\nline2\nline3\n"); + + $message = new RawMessage($handle); + $this->assertSame("line1\nline2\nline3\n", implode('', iterator_to_array($message->toIterable()))); + } + + public function testDestructClosesResource() + { + $handle = fopen('php://memory', 'r+'); + + $message = new RawMessage($handle); + unset($message); + + $this->assertIsClosedResource($handle); + } + public static function provideMessages(): array { return [