在带有不同电子邮件模板的laravel中发送电子邮件的最佳选择是什么

时间:2019-01-10 13:45:51

标签: php laravel laravel-5 laravel-events

我们当前正在使用laravel事件侦听器发送有关laravel的电子邮件。基本上,这是一个插槽预订选项,因此有时我们必须向发件人发送电子邮件,有时我们必须向收件人发送邮件,有时我们必须向该插槽的其他合作伙伴发送电子邮件。在当前情况下,我们使用单个事件列表器发送不同的电子邮件,例如用户在会议中采取的不同操作,例如取消会议,添加一个成员等。但是通常情况下,电子邮件模板仅是动态变量会有所不同需要改变。

但是在新情况下,我们必须在一次操作中向具有不同电子邮件模板和不同内容的不同用户发送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 :(得分:0)

使用模板渲染器制作表格或硬编码数组,然后让这些渲染器根据要提供的变量和馈入邮件程序所需的所有其他变量来渲染twig / blade / 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());
         }
     }
}