Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
/*
4
 * This file is part of the Symfony package.
5
 *
6
 * (c) Fabien Potencier <fabien@symfony.com>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
 
12
namespace Symfony\Component\Mailer;
13
 
14
use Symfony\Component\Mailer\Exception\LogicException;
15
use Symfony\Component\Mime\Address;
16
use Symfony\Component\Mime\Header\Headers;
17
use Symfony\Component\Mime\Message;
18
 
19
/**
20
 * @author Fabien Potencier <fabien@symfony.com>
21
 *
22
 * @internal
23
 */
24
final class DelayedEnvelope extends Envelope
25
{
26
    private bool $senderSet = false;
27
    private bool $recipientsSet = false;
28
    private Message $message;
29
 
30
    public function __construct(Message $message)
31
    {
32
        $this->message = $message;
33
    }
34
 
35
    public function setSender(Address $sender): void
36
    {
37
        parent::setSender($sender);
38
 
39
        $this->senderSet = true;
40
    }
41
 
42
    public function getSender(): Address
43
    {
44
        if (!$this->senderSet) {
45
            parent::setSender(self::getSenderFromHeaders($this->message->getHeaders()));
46
        }
47
 
48
        return parent::getSender();
49
    }
50
 
51
    public function setRecipients(array $recipients): void
52
    {
53
        parent::setRecipients($recipients);
54
 
55
        $this->recipientsSet = (bool) parent::getRecipients();
56
    }
57
 
58
    /**
59
     * @return Address[]
60
     */
61
    public function getRecipients(): array
62
    {
63
        if ($this->recipientsSet) {
64
            return parent::getRecipients();
65
        }
66
 
67
        return self::getRecipientsFromHeaders($this->message->getHeaders());
68
    }
69
 
70
    private static function getRecipientsFromHeaders(Headers $headers): array
71
    {
72
        $recipients = [];
73
        foreach (['to', 'cc', 'bcc'] as $name) {
74
            foreach ($headers->all($name) as $header) {
75
                foreach ($header->getAddresses() as $address) {
76
                    $recipients[] = $address;
77
                }
78
            }
79
        }
80
 
81
        return $recipients;
82
    }
83
 
84
    private static function getSenderFromHeaders(Headers $headers): Address
85
    {
86
        if ($sender = $headers->get('Sender')) {
87
            return $sender->getAddress();
88
        }
89
        if ($return = $headers->get('Return-Path')) {
90
            return $return->getAddress();
91
        }
92
        if ($from = $headers->get('From')) {
93
            return $from->getAddresses()[0];
94
        }
95
 
96
        throw new LogicException('Unable to determine the sender of the message.');
97
    }
98
}