1 | <?php |
||
11 | class MailgunTransport implements Swift_Transport |
||
12 | { |
||
13 | /** |
||
14 | * @var \Mailgun\Mailgun mailgun |
||
15 | */ |
||
16 | private $mailgun; |
||
17 | |||
18 | /** |
||
19 | * @var string domain |
||
20 | */ |
||
21 | private $domain; |
||
22 | |||
23 | /** |
||
24 | * The event dispatcher from the plugin API. |
||
25 | * |
||
26 | * @var \Swift_Events_EventDispatcher eventDispatcher |
||
27 | */ |
||
28 | private $eventDispatcher; |
||
29 | |||
30 | /** |
||
31 | * @param \Swift_Events_EventDispatcher $eventDispatcher |
||
32 | * @param Mailgun $mailgun |
||
33 | * @param $domain |
||
34 | */ |
||
35 | public function __construct(\Swift_Events_EventDispatcher $eventDispatcher, Mailgun $mailgun, $domain) |
||
36 | { |
||
37 | $this->eventDispatcher = $eventDispatcher; |
||
38 | $this->domain = $domain; |
||
39 | $this->mailgun = $mailgun; |
||
40 | } |
||
41 | |||
42 | /** |
||
43 | * Not used. |
||
44 | */ |
||
45 | public function isStarted() |
||
49 | |||
50 | /** |
||
51 | * Not used. |
||
52 | */ |
||
53 | public function start() |
||
56 | |||
57 | /** |
||
58 | * Not used. |
||
59 | */ |
||
60 | public function stop() |
||
63 | |||
64 | /** |
||
65 | * Send the given Message. |
||
66 | * |
||
67 | * Recipient/sender data will be retrieved from the Message API. |
||
68 | * The return value is the number of recipients who were accepted for delivery. |
||
69 | * |
||
70 | * @param Swift_Mime_Message $message |
||
71 | * @param string[] $failedRecipients An array of failures by-reference |
||
72 | * |
||
73 | * @return integer number of mails sent |
||
74 | * @throws \Swift_TransportException |
||
75 | */ |
||
76 | public function send(Swift_Mime_Message $message, &$failedRecipients = null) |
||
77 | { |
||
78 | if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { |
||
79 | $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); |
||
80 | |||
81 | if ($evt->bubbleCancelled()) { |
||
82 | return 0; |
||
83 | } |
||
84 | } |
||
85 | |||
86 | if (null === $message->getHeaders()->get('To')) { |
||
87 | throw new \Swift_TransportException( |
||
88 | 'Cannot send message without a recipient' |
||
89 | ); |
||
90 | } |
||
91 | |||
92 | $postData = $this->prepareRecipients($message); |
||
93 | $result = $this->mailgun->sendMessage($this->domain, $postData, $message->toString()); |
||
94 | |||
95 | if ($evt) { |
||
96 | $evt->setResult( |
||
97 | $result->http_response_code == 200 ? Swift_Events_SendEvent::RESULT_SUCCESS : Swift_Events_SendEvent::RESULT_FAILED |
||
98 | ); |
||
99 | $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); |
||
100 | } |
||
101 | |||
102 | return 1; |
||
103 | } |
||
104 | |||
105 | /** |
||
106 | * Register a plugin in the Transport. |
||
107 | * |
||
108 | * @param Swift_Events_EventListener $plugin |
||
109 | */ |
||
110 | public function registerPlugin(Swift_Events_EventListener $plugin) |
||
114 | |||
115 | /** |
||
116 | * @param Swift_Mime_Message $message |
||
117 | * |
||
118 | * @return array |
||
119 | */ |
||
120 | protected function prepareRecipients(Swift_Mime_Message $message) |
||
142 | } |
||
143 |