PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.31
Booking for Appointments and Events Calendar – Amelia v1.2.31
2.4.9 2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Infrastructure / Services / Notification / MailgunService.php
ameliabooking / src / Infrastructure / Services / Notification Last commit date
MailerFactory.php 1 year ago MailgunService.php 1 year ago OutlookService.php 1 year ago PHPMailService.php 1 year ago SMTPService.php 1 year ago WpMailService.php 1 year ago
MailgunService.php
94 lines
1 <?php
2
3 /**
4 * @copyright © TMS-Plugins. All rights reserved.
5 * @licence See LICENCE.md for license details.
6 */
7
8 namespace AmeliaBooking\Infrastructure\Services\Notification;
9
10 use AmeliaBooking\Domain\Services\Notification\AbstractMailService;
11 use AmeliaBooking\Domain\Services\Notification\MailServiceInterface;
12 use Mailgun\Mailgun;
13
14 /**
15 * Class MailgunService
16 */
17 class MailgunService extends AbstractMailService implements MailServiceInterface
18 {
19 /** @var string */
20 private $apiKey;
21
22 /** @var string */
23 private $domain;
24
25 /** @var string */
26 private $endpoint;
27
28 /**
29 * MailgunService constructor.
30 *
31 * @param string $from
32 * @param string $fromName
33 * @param string $apiKey
34 * @param string $domain
35 * @param string $endpoint
36 */
37 public function __construct($from, $fromName, $apiKey, $domain, $endpoint, $replyTo)
38 {
39 parent::__construct($from, $fromName, $replyTo);
40 $this->apiKey = $apiKey;
41 $this->domain = $domain;
42 $this->endpoint = $endpoint;
43 }
44
45 /** @noinspection MoreThanThreeArgumentsInspection */
46 /**
47 * @param $to
48 * @param $subject
49 * @param $body
50 * @param array $bccEmails
51 * @param array $attachments
52 *
53 * @return mixed|void
54 * @SuppressWarnings(PHPMD)
55 */
56 public function send($to, $subject, $body, $bccEmails = [], $attachments = [])
57 {
58 $mgClient = $this->endpoint ? Mailgun::create($this->apiKey, $this->endpoint) : Mailgun::create($this->apiKey);
59
60 $mgArgs = [
61 'from' => "{$this->fromName} <{$this->from}>",
62 'to' => $to,
63 'subject' => $subject,
64 'html' => $body,
65 'attachment' => [],
66 'h:Reply-To' => !empty($this->replyTo) ? $this->replyTo : $this->from
67 ];
68
69 if ($bccEmails) {
70 $mgArgs['bcc'] = implode(', ', $bccEmails);
71 }
72
73 foreach ($attachments as $attachment) {
74 if (!empty($attachment['content'])) {
75 $isInvoice = strpos($attachment['type'], 'pdf') !== false;
76 if ($isInvoice) {
77 $tmpFile = tempnam(sys_get_temp_dir(), 'Invoice_');
78 } else {
79 $tmpFile = tempnam(sys_get_temp_dir(), 'cal_');
80 }
81 if (
82 $tmpFile &&
83 file_put_contents($tmpFile, $attachment['content']) !== false &&
84 @rename($tmpFile, $tmpFile .= ($isInvoice ? '.pdf' : '.ics')) !== false
85 ) {
86 $mgArgs['attachment'][] = ['filePath' => $tmpFile, 'filename' => $tmpFile];
87 }
88 }
89 }
90
91 $mgClient->messages()->send($this->domain, $mgArgs);
92 }
93 }
94