1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?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\Mailer;
- use Symfony\Component\Mailer\Exception\LogicException;
- use Symfony\Component\Mime\Address;
- use Symfony\Component\Mime\Header\Headers;
- use Symfony\Component\Mime\Message;
- /**
- * @author Fabien Potencier <fabien@symfony.com>
- *
- * @internal
- */
- final class DelayedEnvelope extends Envelope
- {
- private $senderSet = false;
- private $recipientsSet = false;
- private $message;
- public function __construct(Message $message)
- {
- $this->message = $message;
- }
- public function setSender(Address $sender): void
- {
- parent::setSender($sender);
- $this->senderSet = true;
- }
- public function getSender(): Address
- {
- if (!$this->senderSet) {
- parent::setSender(self::getSenderFromHeaders($this->message->getHeaders()));
- }
- return parent::getSender();
- }
- public function setRecipients(array $recipients): void
- {
- parent::setRecipients($recipients);
- $this->recipientsSet = parent::getRecipients();
- }
- /**
- * @return Address[]
- */
- public function getRecipients(): array
- {
- if ($this->recipientsSet) {
- return parent::getRecipients();
- }
- return self::getRecipientsFromHeaders($this->message->getHeaders());
- }
- private static function getRecipientsFromHeaders(Headers $headers): array
- {
- $recipients = [];
- foreach (['to', 'cc', 'bcc'] as $name) {
- foreach ($headers->all($name) as $header) {
- foreach ($header->getAddresses() as $address) {
- $recipients[] = $address;
- }
- }
- }
- return $recipients;
- }
- private static function getSenderFromHeaders(Headers $headers): Address
- {
- if ($sender = $headers->get('Sender')) {
- return $sender->getAddress();
- }
- if ($from = $headers->get('From')) {
- return $from->getAddresses()[0];
- }
- if ($return = $headers->get('Return-Path')) {
- return $return->getAddress();
- }
- throw new LogicException('Unable to determine the sender of the message.');
- }
- }
|