From 8dc2f787f5bac7ede2174905a21f0a4331b13956 Mon Sep 17 00:00:00 2001 From: vasya Date: Sun, 15 Mar 2026 17:47:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=20=D1=8D=D1=82=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D0=BA=D0=B5=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8=20=D0=BC=D0=B5=D0=B9=D0=BB=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=82=20=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D1=8F=20=D0=B8?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B8=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83=20=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=83=D0=BD=D0=B8=D0=B2=D0=B5=D1=80=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9,=20=D1=83=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83?= =?UTF-8?q?=20=D1=81=20=D0=BA=D1=83=D1=87=D0=B5=D0=B9=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D0=B5=D0=B9=20=D0=B8=20SOLID=D0=BD=D0=BE=D0=B9.=20?= =?UTF-8?q?=D0=A1=D1=83=D0=B4=D1=8F=20=D0=BF=D0=BE=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D0=BC=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B8=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B8=D0=BC=20=D0=BE=D1=89=D1=83=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=D0=BC=20-=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?=D1=81=D1=8C=20=D0=BD=D0=B5=D0=BF=D0=BB=D0=BE=D1=85=D0=BE,=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8D=D1=82=D0=BE=D0=BC=D1=83=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=BB=D0=B0=D0=B3=D1=8E=20=D0=B2=D1=81=D0=B5=20=D1=82?= =?UTF-8?q?=D0=B0=D0=BA=D0=B8=20=D1=80=D0=B0=D0=B7=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=D1=81=D1=8F,=20=D0=B0=20=D0=BD=D0=B5=20=D1=80?= =?UTF-8?q?=D1=83=D0=B1=D0=B8=D1=82=D1=8C=20=D0=B8=D0=B7=20=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B6=D1=83=D1=89=D0=B5=D0=B9=D1=81=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Mail/Mailer.php | 145 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 app/Mail/Mailer.php diff --git a/app/Mail/Mailer.php b/app/Mail/Mailer.php new file mode 100644 index 0000000..98beba8 --- /dev/null +++ b/app/Mail/Mailer.php @@ -0,0 +1,145 @@ +mailData['to'] = $this->addDomain($mailerObject->to); + //$this->mailData['to'] = $to; + $this->mailData['copy'] = !empty($copy) ? $this->addDomain($mailerObject->copy) : []; + $this->mailData['subject'] = $mailerObject->subject; + $this->mailData['body'] = $mailerObject->body; + $this->mailData['header'] = $mailerObject->header; + $this->mailData['footer'] = $mailerObject->footer; + $this->checkTestEnv(); + $this->appName = $mailerObject->appName; + $this->mailLayout = $mailerObject->mailLayout; + } + + + /** + * Метод корректирует свойства отправляемого письма, если среда разработки тестовая + * + * @return void + */ + private function checkTestEnv() + { + //Если тестировщик аутентифицирован, берется его логин из сессии, в противном случае берется закрепленный в глобальных конфигах тестовый адрес (который разработчик указывает для своего локального тестирования сам). Можно в будущем улучшить логику с определением тестового емейла, например, передавая к api ендпоинту заголовок с тестовым емейлом, но на старте пока так + // if (auth()->user()->login) { + if (session()->has('_auth_login')) { + $userLogin = session()->get('_auth_login'); + } else { + $userLogin = config('app.mail_test_addressee'); + } + // echo '
'; var_dump($userLogin); echo'
'; + // $test = config('app.test_env'); + // $test2 = config('app.mail_test_addressee'); + // echo '
'; var_dump($test); echo'
'; + // echo '
'; var_dump($test2); echo'
'; + //} + // $userLogin = auth()->user()->login ? auth()->user()->login : (session()->has('_auth_login') ? session()->get('_auth_login')) : config('MAIL_TEST_ADRESSEE'); + //Если работаем из под тестовой среды + if (config('app.test_env')) { + //Информация для тестирования будет добавлена в футер сообщения. В нее включаем информацию об адресатах и копии, если бы письмо отправлялось на проде + $testInfo = "На проде письмо отправится: " . implode(", ", $this->mailData['to']) . ". В копии: " . implode(", ", $this->mailData['copy']); + $this->mailData['footer'] .= $testInfo; + //Копию очищаем + $this->cc(''); + //echo '
'; var_dump(['dgavrilov@rencredit.ru']); echo'
'; + //echo '
'; var_dump($this->addDomain([$userLogin])); echo'
'; + $this->to($this->addDomain([$userLogin])); + //$this->to(['dgavrilov@rencredit.ru']); + } else { + //ГАВРИЛОВ. ДОБАВЬ ДОМЕН К ЛОГИНАМ + $this->to($this->mailData['to']); + $this->to($this->mailData['copy']); + } + } + + + /** + * Хэлпер преобразует всех адресатов, добавляя им почтовый домен + * + * @param array $addresseesArr адресаты + * @return array + */ + private function addDomain(array $addresseesArr): array + { + $domain = config('mail.mail_domain'); + + return array_map(function($el) use($domain) {return $el . "@" . $domain;}, $addresseesArr); + } + + + /** + * Get the message envelope. + */ + public function envelope(): Envelope + { + return new Envelope( + subject: $this->mailData['subject'], + ); + } + + /** + * Get the message content definition. + */ + public function content(): Content + { + return new Content( + // view: 'view.name', + view: $this->mailLayout, + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +}