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 []; + } +}