PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Mailer / MailerFactory.php
mailpoet / lib / Mailer Last commit date
Methods 2 weeks ago WordPress 8 months ago Mailer.php 2 years ago MailerError.php 2 years ago MailerFactory.php 1 year ago MailerLog.php 1 year ago MetaInfo.php 2 months ago SubscriberError.php 3 years ago index.php 3 years ago
MailerFactory.php
171 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Mailer;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\DI\ContainerWrapper;
9 use MailPoet\InvalidStateException;
10 use MailPoet\Mailer\Methods\AmazonSES;
11 use MailPoet\Mailer\Methods\ErrorMappers\AmazonSESMapper;
12 use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper;
13 use MailPoet\Mailer\Methods\ErrorMappers\PHPMailMapper;
14 use MailPoet\Mailer\Methods\ErrorMappers\SendGridMapper;
15 use MailPoet\Mailer\Methods\ErrorMappers\SMTPMapper;
16 use MailPoet\Mailer\Methods\MailPoet;
17 use MailPoet\Mailer\Methods\PHPMail;
18 use MailPoet\Mailer\Methods\SendGrid;
19 use MailPoet\Mailer\Methods\SMTP;
20 use MailPoet\Services\AuthorizedEmailsController;
21 use MailPoet\Services\Bridge;
22 use MailPoet\Settings\SettingsController;
23 use MailPoet\Util\Url;
24 use MailPoet\WP\Functions as WPFunctions;
25
26 class MailerFactory {
27 /** @var SettingsController */
28 private $settings;
29
30 /** @var WPFunctions */
31 private $wp;
32
33 /** @var Mailer */
34 private $defaultMailer;
35
36 public function __construct(
37 SettingsController $settings,
38 WPFunctions $wp
39 ) {
40 $this->settings = $settings;
41 $this->wp = $wp;
42 }
43
44 public function getDefaultMailer(): Mailer {
45 if ($this->defaultMailer === null) {
46 $this->defaultMailer = $this->buildMailer();
47 }
48 return $this->defaultMailer;
49 }
50
51 public function buildMailer(?array $mailerConfig = null, ?array $sender = null, ?array $replyTo = null, ?string $returnPath = null): Mailer {
52 $sender = $this->getSenderNameAndAddress($sender);
53 $replyTo = $this->getReplyToNameAndAddress($sender, $replyTo);
54 $mailerConfig = $mailerConfig ?? $this->getMailerConfig();
55 $returnPath = $returnPath ?? $this->getReturnPathAddress($sender);
56 switch ($mailerConfig['method']) {
57 case Mailer::METHOD_AMAZONSES:
58 $mailerMethod = new AmazonSES(
59 $mailerConfig['region'],
60 $mailerConfig['access_key'],
61 $mailerConfig['secret_key'],
62 $sender,
63 $replyTo,
64 $returnPath,
65 new AmazonSESMapper(),
66 $this->wp,
67 ContainerWrapper::getInstance()->get(Url::class)
68 );
69 break;
70 case Mailer::METHOD_MAILPOET:
71 $mailerMethod = new MailPoet(
72 $mailerConfig['mailpoet_api_key'],
73 $sender,
74 $replyTo,
75 ContainerWrapper::getInstance()->get(MailPoetMapper::class),
76 ContainerWrapper::getInstance()->get(AuthorizedEmailsController::class),
77 ContainerWrapper::getInstance()->get(Bridge::class),
78 ContainerWrapper::getInstance()->get(Url::class)
79 );
80 break;
81 case Mailer::METHOD_SENDGRID:
82 $mailerMethod = new SendGrid(
83 $mailerConfig['api_key'],
84 $sender,
85 $replyTo,
86 new SendGridMapper(),
87 ContainerWrapper::getInstance()->get(Url::class)
88 );
89 break;
90 case Mailer::METHOD_PHPMAIL:
91 $mailerMethod = new PHPMail(
92 $sender,
93 $replyTo,
94 $returnPath,
95 new PHPMailMapper(),
96 ContainerWrapper::getInstance()->get(Url::class)
97 );
98 break;
99 case Mailer::METHOD_SMTP:
100 $mailerMethod = new SMTP(
101 $mailerConfig['host'],
102 $mailerConfig['port'],
103 (int)$mailerConfig['authentication'],
104 $mailerConfig['encryption'],
105 $sender,
106 $replyTo,
107 $returnPath,
108 new SMTPMapper(),
109 ContainerWrapper::getInstance()->get(Url::class),
110 $mailerConfig['login'],
111 $mailerConfig['password']
112 );
113 break;
114 default:
115 throw new InvalidStateException(__('Mailing method does not exist.', 'mailpoet'));
116 }
117 return new Mailer($mailerMethod);
118 }
119
120 private function getMailerConfig(): array {
121 $config = $this->settings->get(Mailer::MAILER_CONFIG_SETTING_NAME);
122 if (!$config || !isset($config['method'])) throw new InvalidStateException(__('Mailer is not configured.', 'mailpoet'));
123 return $config;
124 }
125
126 private function getSenderNameAndAddress(?array $sender = null): array {
127 if (empty($sender)) {
128 $sender = $this->settings->get('sender', []);
129 if (empty($sender['address'])) throw new InvalidStateException(__('Sender name and email are not configured.', 'mailpoet'));
130 }
131 $fromName = $this->encodeAddressNamePart($sender['name'] ?? '');
132 return [
133 'from_name' => $fromName,
134 'from_email' => $sender['address'],
135 'from_name_email' => sprintf('%s <%s>', $fromName, $sender['address']),
136 ];
137 }
138
139 private function getReplyToNameAndAddress(array $sender, ?array $replyTo = null): array {
140 if (!$replyTo) {
141 $replyTo = $this->settings->get('reply_to');
142 $replyTo['name'] = (!empty($replyTo['name'])) ?
143 $replyTo['name'] :
144 $sender['from_name'];
145 $replyTo['address'] = (!empty($replyTo['address'])) ?
146 $replyTo['address'] :
147 $sender['from_email'];
148 }
149 if (empty($replyTo['address'])) {
150 $replyTo['address'] = $sender['from_email'];
151 }
152 $replyToName = $this->encodeAddressNamePart($replyTo['name'] ?? '');
153 return [
154 'reply_to_name' => $replyToName,
155 'reply_to_email' => $replyTo['address'],
156 'reply_to_name_email' => sprintf('%s <%s>', $replyToName, $replyTo['address']),
157 ];
158 }
159
160 private function getReturnPathAddress(array $sender): ?string {
161 $bounceAddress = (string)$this->settings->get('bounce.address');
162 return $this->wp->isEmail($bounceAddress) ? $bounceAddress : $sender['from_email'];
163 }
164
165 private function encodeAddressNamePart($name): string {
166 if (mb_detect_encoding($name) === 'ASCII') return $name;
167 // encode non-ASCII string as per RFC 2047 (https://www.ietf.org/rfc/rfc2047.txt)
168 return sprintf('=?utf-8?B?%s?=', base64_encode($name));
169 }
170 }
171