mail_sender #15
@@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Mail\Mailables\Content;
|
||||||
|
use Illuminate\Mail\Mailables\Envelope;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use App\Mail\BaseMailerObj;
|
||||||
|
|
||||||
|
class Mailer extends Mailable
|
||||||
|
{
|
||||||
|
#Гаврилов
|
||||||
|
//ЗАЧЕМ ОНИ СЮДА ДОБАВИЛИСЬ? ТЕСТИРОВАЛ ОТПРАВКУ ОЧЕРЕДЕЙ? УДАЛИ ЕСЛИ НЕ НУЖНЫ ОТСЮДА И ИЗ USE
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array данные для письма
|
||||||
|
*/
|
||||||
|
public $mailData;
|
||||||
|
/**
|
||||||
|
* @var string имя blade шаблона
|
||||||
|
*/
|
||||||
|
public $mailLayout;
|
||||||
|
/**
|
||||||
|
* @var string название приложения, которое отправляет сообщение
|
||||||
|
*/
|
||||||
|
public $appName;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*
|
||||||
|
* @param array $to - адресаты письма
|
||||||
|
* @param string $subject - тема письма
|
||||||
|
* @param string $body - основной текст письма
|
||||||
|
* @param array $copy - кто будет в копии
|
||||||
|
* @param string $header - шапка письма, например, для заголовка
|
||||||
|
* @param string $footer - подвал письма, например для технической информации
|
||||||
|
* @param string $appName название приложения назмещается под названием платформы Magic в футере письма
|
||||||
|
* @param string $mailLayout используемый blade шаблон для отправки
|
||||||
|
*/
|
||||||
|
public function __construct(BaseMailerObj $mailerObject)
|
||||||
|
{
|
||||||
|
//Преобразуем передаваемых адресатов, добавляя им логин
|
||||||
|
$this->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 '<pre>'; var_dump($userLogin); echo'</pre>';
|
||||||
|
// $test = config('app.test_env');
|
||||||
|
// $test2 = config('app.mail_test_addressee');
|
||||||
|
// echo '<pre>'; var_dump($test); echo'</pre>';
|
||||||
|
// echo '<pre>'; var_dump($test2); echo'</pre>';
|
||||||
|
//}
|
||||||
|
// $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 '<pre>'; var_dump(['dgavrilov@rencredit.ru']); echo'</pre>';
|
||||||
|
//echo '<pre>'; var_dump($this->addDomain([$userLogin])); echo'</pre>';
|
||||||
|
$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<int, \Illuminate\Mail\Mailables\Attachment>
|
||||||
|
*/
|
||||||
|
public function attachments(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user