| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\Mime;
 
- use Symfony\Component\Mime\Exception\LogicException;
 
- use Symfony\Component\Mime\Header\Headers;
 
- use Symfony\Component\Mime\Part\AbstractPart;
 
- use Symfony\Component\Mime\Part\TextPart;
 
- /**
 
-  * @author Fabien Potencier <fabien@symfony.com>
 
-  */
 
- class Message extends RawMessage
 
- {
 
-     private $headers;
 
-     private $body;
 
-     public function __construct(Headers $headers = null, AbstractPart $body = null)
 
-     {
 
-         $this->headers = $headers ? clone $headers : new Headers();
 
-         $this->body = $body;
 
-     }
 
-     public function __clone()
 
-     {
 
-         $this->headers = clone $this->headers;
 
-         if (null !== $this->body) {
 
-             $this->body = clone $this->body;
 
-         }
 
-     }
 
-     /**
 
-      * @return $this
 
-      */
 
-     public function setBody(AbstractPart $body = null)
 
-     {
 
-         $this->body = $body;
 
-         return $this;
 
-     }
 
-     public function getBody(): ?AbstractPart
 
-     {
 
-         return $this->body;
 
-     }
 
-     /**
 
-      * @return $this
 
-      */
 
-     public function setHeaders(Headers $headers)
 
-     {
 
-         $this->headers = $headers;
 
-         return $this;
 
-     }
 
-     public function getHeaders(): Headers
 
-     {
 
-         return $this->headers;
 
-     }
 
-     public function getPreparedHeaders(): Headers
 
-     {
 
-         $headers = clone $this->headers;
 
-         if (!$headers->has('From')) {
 
-             if (!$headers->has('Sender')) {
 
-                 throw new LogicException('An email must have a "From" or a "Sender" header.');
 
-             }
 
-             $headers->addMailboxListHeader('From', [$headers->get('Sender')->getAddress()]);
 
-         }
 
-         $headers->addTextHeader('MIME-Version', '1.0');
 
-         if (!$headers->has('Date')) {
 
-             $headers->addDateHeader('Date', new \DateTimeImmutable());
 
-         }
 
-         // determine the "real" sender
 
-         if (!$headers->has('Sender') && \count($froms = $headers->get('From')->getAddresses()) > 1) {
 
-             $headers->addMailboxHeader('Sender', $froms[0]);
 
-         }
 
-         if (!$headers->has('Message-ID')) {
 
-             $headers->addIdHeader('Message-ID', $this->generateMessageId());
 
-         }
 
-         // remove the Bcc field which should NOT be part of the sent message
 
-         $headers->remove('Bcc');
 
-         return $headers;
 
-     }
 
-     public function toString(): string
 
-     {
 
-         if (null === $body = $this->getBody()) {
 
-             $body = new TextPart('');
 
-         }
 
-         return $this->getPreparedHeaders()->toString().$body->toString();
 
-     }
 
-     public function toIterable(): iterable
 
-     {
 
-         if (null === $body = $this->getBody()) {
 
-             $body = new TextPart('');
 
-         }
 
-         yield $this->getPreparedHeaders()->toString();
 
-         yield from $body->toIterable();
 
-     }
 
-     public function ensureValidity()
 
-     {
 
-         if (!$this->headers->has('To') && !$this->headers->has('Cc') && !$this->headers->has('Bcc')) {
 
-             throw new LogicException('An email must have a "To", "Cc", or "Bcc" header.');
 
-         }
 
-         if (!$this->headers->has('From') && !$this->headers->has('Sender')) {
 
-             throw new LogicException('An email must have a "From" or a "Sender" header.');
 
-         }
 
-         parent::ensureValidity();
 
-     }
 
-     public function generateMessageId(): string
 
-     {
 
-         if ($this->headers->has('Sender')) {
 
-             $sender = $this->headers->get('Sender')->getAddress();
 
-         } elseif ($this->headers->has('From')) {
 
-             $sender = $this->headers->get('From')->getAddresses()[0];
 
-         } else {
 
-             throw new LogicException('An email must have a "From" or a "Sender" header.');
 
-         }
 
-         return bin2hex(random_bytes(16)).strstr($sender->getAddress(), '@');
 
-     }
 
-     public function __serialize(): array
 
-     {
 
-         return [$this->headers, $this->body];
 
-     }
 
-     public function __unserialize(array $data): void
 
-     {
 
-         [$this->headers, $this->body] = $data;
 
-     }
 
- }
 
 
  |