1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
/* |
6
|
|
|
* This file is part of the Valkyrja Framework package. |
7
|
|
|
* |
8
|
|
|
* (c) Melech Mizrachi <[email protected]> |
9
|
|
|
* |
10
|
|
|
* For the full copyright and license information, please view the LICENSE |
11
|
|
|
* file that was distributed with this source code. |
12
|
|
|
*/ |
13
|
|
|
|
14
|
|
|
namespace Valkyrja\Mail\Provider; |
15
|
|
|
|
16
|
|
|
use GuzzleHttp\Client; |
17
|
|
|
use Mailgun\HttpClient\HttpClientConfigurator; |
18
|
|
|
use Mailgun\Mailgun; |
19
|
|
|
use PHPMailer\PHPMailer\PHPMailer as PHPMailerClient; |
20
|
|
|
use Valkyrja\Application\Env; |
|
|
|
|
21
|
|
|
use Valkyrja\Container\Contract\Container; |
22
|
|
|
use Valkyrja\Container\Support\Provider; |
23
|
|
|
use Valkyrja\Log\Contract\Logger; |
24
|
|
|
use Valkyrja\Mail\Contract\Mailer; |
25
|
|
|
use Valkyrja\Mail\LogMailer; |
26
|
|
|
use Valkyrja\Mail\MailgunMailer; |
27
|
|
|
use Valkyrja\Mail\NullMailer; |
28
|
|
|
use Valkyrja\Mail\PhpMailer; |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* Class ServiceProvider. |
32
|
|
|
* |
33
|
|
|
* @author Melech Mizrachi |
34
|
|
|
*/ |
35
|
|
|
final class ServiceProvider extends Provider |
36
|
|
|
{ |
37
|
|
|
/** |
38
|
|
|
* @inheritDoc |
39
|
|
|
*/ |
40
|
|
|
public static function publishers(): array |
41
|
|
|
{ |
42
|
|
|
return [ |
43
|
|
|
Mailer::class => [self::class, 'publishMailer'], |
44
|
|
|
MailgunMailer::class => [self::class, 'publishMailgunMailer'], |
45
|
|
|
Mailgun::class => [self::class, 'publishMailgun'], |
46
|
|
|
HttpClientConfigurator::class => [self::class, 'publishMailgunHttpClientConfigurator'], |
47
|
|
|
PhpMailer::class => [self::class, 'publishPhpMailer'], |
48
|
|
|
PHPMailerClient::class => [self::class, 'publishPhpMailerClient'], |
49
|
|
|
LogMailer::class => [self::class, 'publishLogMailer'], |
50
|
|
|
NullMailer::class => [self::class, 'publishNullMailer'], |
51
|
|
|
]; |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
/** |
55
|
|
|
* @inheritDoc |
56
|
|
|
*/ |
57
|
|
|
public static function provides(): array |
58
|
|
|
{ |
59
|
|
|
return [ |
60
|
|
|
Mailer::class, |
61
|
|
|
MailgunMailer::class, |
62
|
|
|
Mailgun::class, |
63
|
|
|
HttpClientConfigurator::class, |
64
|
|
|
PhpMailer::class, |
65
|
|
|
PHPMailerClient::class, |
66
|
|
|
LogMailer::class, |
67
|
|
|
NullMailer::class, |
68
|
|
|
]; |
69
|
|
|
} |
70
|
|
|
|
71
|
|
|
/** |
72
|
|
|
* Publish the mailer service. |
73
|
|
|
*/ |
74
|
|
|
public static function publishMailer(Container $container): void |
75
|
|
|
{ |
76
|
|
|
$container->setSingleton( |
77
|
|
|
Mailer::class, |
78
|
|
|
$container->getSingleton(MailgunMailer::class), |
79
|
|
|
); |
80
|
|
|
} |
81
|
|
|
|
82
|
|
|
/** |
83
|
|
|
* Publish the mailgun mailer service. |
84
|
|
|
*/ |
85
|
|
|
public static function publishMailgunMailer(Container $container): void |
86
|
|
|
{ |
87
|
|
|
$env = $container->getSingleton(Env::class); |
88
|
|
|
/** @var non-empty-string $domain */ |
89
|
|
|
$domain = $env::MAIL_MAILGUN_DOMAIN; |
90
|
|
|
|
91
|
|
|
$container->setSingleton( |
92
|
|
|
MailgunMailer::class, |
93
|
|
|
new MailgunMailer( |
94
|
|
|
$container->getSingleton(Mailgun::class), |
95
|
|
|
$domain |
96
|
|
|
) |
97
|
|
|
); |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
/** |
101
|
|
|
* Publish the mailgun service. |
102
|
|
|
*/ |
103
|
|
|
public static function publishMailgun(Container $container): void |
104
|
|
|
{ |
105
|
|
|
$container->setSingleton( |
106
|
|
|
Mailer::class, |
107
|
|
|
new Mailgun( |
108
|
|
|
$container->getSingleton(HttpClientConfigurator::class), |
109
|
|
|
) |
110
|
|
|
); |
111
|
|
|
} |
112
|
|
|
|
113
|
|
|
/** |
114
|
|
|
* Publish the mailgun service. |
115
|
|
|
*/ |
116
|
|
|
public static function publishMailgunHttpClientConfigurator(Container $container): void |
117
|
|
|
{ |
118
|
|
|
$env = $container->getSingleton(Env::class); |
119
|
|
|
/** @var string $apiKey */ |
120
|
|
|
$apiKey = $env::MAIL_MAILGUN_API_KEY; |
121
|
|
|
|
122
|
|
|
$container->setSingleton( |
123
|
|
|
HttpClientConfigurator::class, |
124
|
|
|
(new HttpClientConfigurator()) |
125
|
|
|
->setApiKey($apiKey) |
126
|
|
|
->setHttpClient(new Client()) |
127
|
|
|
); |
128
|
|
|
} |
129
|
|
|
|
130
|
|
|
/** |
131
|
|
|
* Publish the PHPMailer mailer service. |
132
|
|
|
*/ |
133
|
|
|
public static function publishPhpMailer(Container $container): void |
134
|
|
|
{ |
135
|
|
|
$container->setSingleton( |
136
|
|
|
PhpMailer::class, |
137
|
|
|
new PhpMailer( |
138
|
|
|
$container->getSingleton(PHPMailerClient::class), |
139
|
|
|
), |
140
|
|
|
); |
141
|
|
|
} |
142
|
|
|
|
143
|
|
|
/** |
144
|
|
|
* Publish the PHPMailer client service. |
145
|
|
|
*/ |
146
|
|
|
public static function publishPhpMailerClient(Container $container): void |
147
|
|
|
{ |
148
|
|
|
$env = $container->getSingleton(Env::class); |
149
|
|
|
/** @var bool $debugMode */ |
150
|
|
|
$debugMode = $env::APP_DEBUG_MODE; |
151
|
|
|
/** @var string $host */ |
152
|
|
|
$host = $env::MAIL_PHP_MAILER_HOST; |
153
|
|
|
/** @var int $port */ |
154
|
|
|
$port = $env::MAIL_PHP_MAILER_PORT; |
155
|
|
|
/** @var string $username */ |
156
|
|
|
$username = $env::MAIL_PHP_MAILER_USERNAME; |
157
|
|
|
/** @var string $password */ |
158
|
|
|
$password = $env::MAIL_PHP_MAILER_PASSWORD; |
159
|
|
|
/** @var string $encryption */ |
160
|
|
|
$encryption = $env::MAIL_PHP_MAILER_ENCRYPTION; |
161
|
|
|
|
162
|
|
|
// Create a new instance of the PHPMailer class |
163
|
|
|
$mailer = new PHPMailerClient(true); |
164
|
|
|
|
165
|
|
|
// Enable verbose debug output |
166
|
|
|
$mailer->SMTPDebug = $debugMode ? 2 : 0; |
167
|
|
|
// Set mailer to use SMTP |
168
|
|
|
$mailer->isSMTP(); |
169
|
|
|
// Specify main and backup SMTP servers |
170
|
|
|
$mailer->Host = $host; |
171
|
|
|
// SMTP Port |
172
|
|
|
$mailer->Port = $port; |
173
|
|
|
// Enable SMTP authentication |
174
|
|
|
$mailer->SMTPAuth = true; |
175
|
|
|
// SMTP username |
176
|
|
|
$mailer->Username = $username; |
177
|
|
|
// SMTP password |
178
|
|
|
$mailer->Password = $password; |
179
|
|
|
// Enable TLS encryption, `ssl` also accepted |
180
|
|
|
$mailer->SMTPSecure = $encryption; |
181
|
|
|
|
182
|
|
|
$container->setSingleton( |
183
|
|
|
PHPMailerClient::class, |
184
|
|
|
$mailer |
185
|
|
|
); |
186
|
|
|
} |
187
|
|
|
|
188
|
|
|
/** |
189
|
|
|
* Publish the log mailer service. |
190
|
|
|
*/ |
191
|
|
|
public static function publishLogMailer(Container $container): void |
192
|
|
|
{ |
193
|
|
|
$container->setSingleton( |
194
|
|
|
LogMailer::class, |
195
|
|
|
new LogMailer( |
196
|
|
|
$container->getSingleton(Logger::class), |
197
|
|
|
), |
198
|
|
|
); |
199
|
|
|
} |
200
|
|
|
|
201
|
|
|
/** |
202
|
|
|
* Publish the null mailer service. |
203
|
|
|
*/ |
204
|
|
|
public static function publishNullMailer(Container $container): void |
205
|
|
|
{ |
206
|
|
|
$container->setSingleton( |
207
|
|
|
NullMailer::class, |
208
|
|
|
new NullMailer(), |
209
|
|
|
); |
210
|
|
|
} |
211
|
|
|
} |
212
|
|
|
|
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths