Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php declare(strict_types=1);
2
 
3
/*
4
 * This file is part of the Monolog package.
5
 *
6
 * (c) Jordi Boggiano <j.boggiano@seld.be>
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 Monolog\Handler;
13
 
14
use Monolog\Logger;
15
use Swift;
16
use Swift_Message;
17
 
18
/**
19
 * MandrillHandler uses cURL to send the emails to the Mandrill API
20
 *
21
 * @author Adam Nicholson <adamnicholson10@gmail.com>
22
 */
23
class MandrillHandler extends MailHandler
24
{
25
    /** @var Swift_Message */
26
    protected $message;
27
    /** @var string */
28
    protected $apiKey;
29
 
30
    /**
31
     * @psalm-param Swift_Message|callable(): Swift_Message $message
32
     *
33
     * @param string                 $apiKey  A valid Mandrill API key
34
     * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced
35
     */
36
    public function __construct(string $apiKey, $message, $level = Logger::ERROR, bool $bubble = true)
37
    {
38
        parent::__construct($level, $bubble);
39
 
40
        if (!$message instanceof Swift_Message && is_callable($message)) {
41
            $message = $message();
42
        }
43
        if (!$message instanceof Swift_Message) {
44
            throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it');
45
        }
46
        $this->message = $message;
47
        $this->apiKey = $apiKey;
48
    }
49
 
50
    /**
51
     * {@inheritDoc}
52
     */
53
    protected function send(string $content, array $records): void
54
    {
55
        $mime = 'text/plain';
56
        if ($this->isHtmlBody($content)) {
57
            $mime = 'text/html';
58
        }
59
 
60
        $message = clone $this->message;
61
        $message->setBody($content, $mime);
62
        /** @phpstan-ignore-next-line */
63
        if (version_compare(Swift::VERSION, '6.0.0', '>=')) {
64
            $message->setDate(new \DateTimeImmutable());
65
        } else {
66
            /** @phpstan-ignore-next-line */
67
            $message->setDate(time());
68
        }
69
 
70
        $ch = curl_init();
71
 
72
        curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json');
73
        curl_setopt($ch, CURLOPT_POST, 1);
74
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
75
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
76
            'key' => $this->apiKey,
77
            'raw_message' => (string) $message,
78
            'async' => false,
79
        ]));
80
 
81
        Curl\Util::execute($ch);
82
    }
83
}