Как лучше всего отправлять письма в laravel с другим шаблоном электронной почты? - PullRequest
0 голосов
/ 10 января 2019

В настоящее время мы используем слушатель событий 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);

1 Ответ

0 голосов
/ 10 января 2019

Создайте либо таблицу, либо жестко запрограммированный массив с шаблонами для визуализации, затем пусть эти средства визуализации отобразят шаблон ветки / лезвия / 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());
         }
     }
}
...