PHP 8.3.31
Preview: Message.php Size: 4.33 KB
/home/getspomw/royalsquad.us/vendor/symfony/mime/Message.php

<?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 $headers;

    public function __construct(
        ?Headers $headers = null,
        private ?AbstractPart $body = null,
    ) {
        $this->headers = $headers ? clone $headers : new Headers();
    }

    public function __clone()
    {
        $this->headers = clone $this->headers;

        if (null !== $this->body) {
            $this->body = clone $this->body;
        }
    }

    /**
     * @return $this
     */
    public function setBody(?AbstractPart $body): static
    {
        $this->body = $body;

        return $this;
    }

    public function getBody(): ?AbstractPart
    {
        return $this->body;
    }

    /**
     * @return $this
     */
    public function setHeaders(Headers $headers): static
    {
        $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()]);
        }

        if (!$headers->has('MIME-Version')) {
            $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(): void
    {
        if (!$this->headers->get('To')?->getBody() && !$this->headers->get('Cc')?->getBody() && !$this->headers->get('Bcc')?->getBody()) {
            throw new LogicException('An email must have a "To", "Cc", or "Bcc" header.');
        }

        if (!$this->headers->get('From')?->getBody() && !$this->headers->get('Sender')?->getBody()) {
            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')) {
            if (!$froms = $this->headers->get('From')->getAddresses()) {
                throw new LogicException('A "From" header must have at least one email address.');
            }
            $sender = $froms[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;
    }
}

Directory Contents

Dirs: 9 × Files: 18

Name Size Perms Modified Actions
Crypto DIR
- drwxrwxrwx 2026-04-21 14:29:09
Edit Download
- drwxrwxrwx 2026-04-21 14:21:27
Edit Download
Encoder DIR
- drwxrwxrwx 2026-04-21 09:10:19
Edit Download
Exception DIR
- drwxrwxrwx 2026-04-21 08:40:37
Edit Download
Header DIR
- drwxrwxrwx 2026-04-21 13:59:39
Edit Download
- drwxrwxrwx 2026-04-21 18:26:09
Edit Download
Part DIR
- drwxrwxrwx 2026-04-19 16:48:34
Edit Download
Resources DIR
- drwxrwxrwx 2025-09-17 06:53:20
Edit Download
Test DIR
- drwxrwxrwx 2025-09-17 06:53:20
Edit Download
4.44 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
418 B lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
1.12 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
9.13 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
1.42 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
1.10 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
14.98 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
13.23 KB lrw-r--r-- 2026-04-27 12:53:10
Edit Download
2.37 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
1.98 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
1.04 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
4.33 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
5.04 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
826 B lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
191.01 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
777 B lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
2.38 KB lrw-rw-rw- 2025-09-17 06:53:20
Edit Download
459 B lrw-rw-rw- 2025-09-17 06:53:20
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).