В настоящее время мы используем прослушиватель событий laravel для отправки электронных писем для laravel. По сути, это вариант бронирования слотов, поэтому иногда нам приходится отправлять электронные письма отправителю, а иногда отправлять получателю, а иногда — другим партнерам слотов. В текущем случае мы используем один Event Listner для отправки разных электронных писем для различных действий, которые пользователи выполняют в слоте, таких как отмена собрания, добавление еще одного участника и т. Д. Но, как правило, в этом случае шаблоны электронной почты будут отличаться только от дунамических переменных, которые мы нужно изменить.
Но в новом случае мы должны отправить 4 или 5 писем разным пользователям с разными шаблонами писем и разным содержимым за одно действие. Если мы планируем это в едином списке событий, как мы можем справиться с этим?
$event_id=$event->user['XXXXX'];//event id
$slot_type=$event->user['XXXXX'];//slot type
$notification_type=$event->user['XXXXX']; //slot type
$scheduler_slot_info_ids=$event->user['XXXX'];
$data = $schedulerHelper->getOnetoOneNotificationContents($scheduler_slot_info_ids,$event_id,$slot_type);
$action_trigger_by=$event->user['XXXXX'];
//$data['subject'] = 'CARVRE SEVEN|MEETING CONFIRMED';
$data['subject'] = $event->user['XXXX'];
// $data['template'] = 'emailtemplates.scheduler.oneToOneMeetingConfirmed';
$data['template'] = $event->user['XXXX'];
$invitee_id=Crypt::encryptString($data['XXXX']);
$crypt_event_id=Crypt::encryptString($event_id);
$data['link'] = url('XXXX');
$data['email_admin'] = env('FROM_EMAIL');
$data['mail_from_name'] = env('MAIL_FROM_NAME');
// $data['receiver_email'] = 'XXXXXXX';//$invitee['email'];
//Calling mail helper function
MailHelper::sendMail($data);
Создайте либо таблицу, либо жестко запрограммированный массив с шаблонами для визуализации, затем попросите эти средства визуализации отобразить шаблон ветки / блейд / php на основе переменных, которые вы предоставляете, и всех других переменных, которые вам понадобятся для подачи в почтовую программу.
Затем просто переберите всех получающих кандидатов и отправьте соответствующие электронные письма с правильным средством визуализации.
Вам нужно будет создать несколько служебных классов и все для этого, но как только вы установите его и разберетесь, им будет легко управлять и расширять его с помощью большего количества шаблонов.
Просто грубый набросок того, что я бы использовал
protected $renderers = [
'templateA' => '\Foo\Bar\BazEmailRender',
'templateB' => '\Foo\Bar\BbyEmailRender',
'templateC' => '\Foo\Bar\BcxEmailRender',
];
public function getTemplate($name)
{
if(array_key_exists($name, $this->renderers)) {
$clazz = $this->renderers[$name];
return new $clazz();
}
return null;
}
public function handleEmails($list, $action)
{
$mailer = $this->getMailer();
foreach($list as $receiver) {
if(($template = $this->getTemplate($receiver->getFormat()))) {
$template->setVars([
'action' => $action,
'action_name' => $action->getName(),
'action_time' => $action->created_at,
// etc...
]);
$mailer->send($receiver->email, $template->getSubject(), $template->getEmailBody());
}
}
}
Других решений пока нет …