1 | <?php |
||
10 | final class SimpleMailer implements Mailer |
||
11 | { |
||
12 | private const MESSAGE_LINE_CHARACTERS_LIMIT = 70; |
||
13 | |||
14 | /** @var callable|null */ |
||
15 | private $handler; |
||
16 | |||
17 | /** @var EmailMessage */ |
||
18 | private $message; |
||
19 | |||
20 | 2 | public function __construct(callable $handler = null) |
|
24 | |||
25 | 2 | public function send(EmailMessage $message): void |
|
26 | { |
||
27 | 2 | $this->message = $message; |
|
28 | |||
29 | 2 | $status = call_user_func( |
|
30 | 2 | $this->handler ?? 'mail', |
|
31 | 2 | $this->buildTo(), |
|
32 | 2 | $this->buildSubject(), |
|
33 | 2 | $this->buildMessage(), |
|
34 | 2 | $this->buildHeaders() |
|
35 | ); |
||
36 | |||
37 | 2 | if (!$status) { |
|
38 | 1 | $error = error_get_last(); |
|
39 | 1 | throw SendingMessageFailed::dueTo(new ErrorException($error['message'] ?? 'Email has not been accepted for delivery')); |
|
40 | } |
||
41 | 1 | } |
|
42 | |||
43 | 2 | private function buildTo(): string |
|
47 | |||
48 | 2 | private function buildSubject(): string |
|
52 | |||
53 | 2 | private function buildMessage(): string |
|
57 | |||
58 | 2 | private function buildHeaders(): string |
|
70 | } |
||
71 |