generated from spatie/package-skeleton-laravel
-
Notifications
You must be signed in to change notification settings - Fork 5
/
UsesMailcoachMail.php
85 lines (63 loc) · 2.28 KB
/
UsesMailcoachMail.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace Spatie\MailcoachMailer\Concerns;
use Spatie\MailcoachMailer\Headers\MailerHeader;
use Spatie\MailcoachMailer\Headers\ReplacementHeader;
use Spatie\MailcoachMailer\Headers\TransactionalMailHeader;
use Symfony\Component\Mime\Email;
/** @mixin \Illuminate\Mail\Mailable */
trait UsesMailcoachMail
{
private bool $usingMailcoachMail = false;
public function mailcoachMail(string $mailName, array $replacements = [], ?string $mailer = null): self
{
$this->usingMailcoachMail = true;
$this->html = 'use-mailcoach-mail';
$this->replacing($replacements);
$this->usingMailer($mailer);
$this->withSymfonyMessage(function (Email $email) use ($mailName) {
$transactionalHeader = new TransactionalMailHeader($mailName);
if ($email->getHeaders()->has($transactionalHeader->getName())) {
$email->getHeaders()->remove($transactionalHeader->getName());
}
$email->getHeaders()->add($transactionalHeader);
});
return $this;
}
public function usingMailer(?string $mailer): self
{
if (! $mailer) {
return $this;
}
$this->withSymfonyMessage(function (Email $email) use ($mailer) {
$mailerHeader = new MailerHeader($mailer);
if ($email->getHeaders()->has($mailerHeader->getName())) {
$email->getHeaders()->remove($mailerHeader->getName());
}
$email->getHeaders()->add($mailerHeader);
});
return $this;
}
public function replacing(array|string $key, string|array|null $value = null): self
{
if (is_array($key)) {
foreach ($key as $realKey => $value) {
$this->replacing($realKey, $value);
}
return $this;
}
$this->withSymfonyMessage(function (Email $email) use ($key, $value) {
$email->getHeaders()->add(new ReplacementHeader($key, $value));
});
return $this;
}
protected function buildSubject($message): self
{
if (! $this->usingMailcoachMail) {
return parent::buildSubject($message);
}
if ($this->subject) {
$message->subject($this->subject);
}
return $this;
}
}