代码之家  ›  专栏  ›  技术社区  ›  Mark

通过特征设置邮件头?

  •  1
  • Mark  · 技术社区  · 8 年前

    我正在创建一个Laravel软件包,它将受益于电子邮件的使用。当用户使用我的软件包时,他们会希望通过电子邮件发送由该软件包创建的文件,但也会为电子邮件设置一些自定义标题。

    在理想的解决方案中,我希望开发人员能够简单地 use

    一些解决方案建议通过将其放入 build

    $this->withSwiftMessage(function ($message) {
        $headers = $message->getHeaders();
        $headers->addTextHeader('mime', 'text/calendar');
    });
    

    建筑

    1 回复  |  直到 8 年前
        1
  •  3
  •   Desh901    8 年前

    唯一能用特质做到这一点的方法是定义 build 方法,并让用户定义另一个函数,而不是 这样您就可以直接操作 Mailable

    所以你的特点是:

    trait IsMailable {
    
    
         public function build()
         {
              $this->withSwiftMessage(function ($message) {
                  $headers = $message->getHeaders();
                  $headers->addTextHeader('mime', 'text/calendar');
              });
    
              if(!method_exists($this, 'buildMail')) throw \Exception('buildMail is not defined!');
              return $this->buildMail();
          }
    
    
    
    }
    

    buildMail 而不是 建筑

    最优解

    最优解IMHO将扩展类 Illuminate\Mail\Mailable send 照明\邮件\可邮寄 .

    所以你的课程是:

    class Mailable extends \Illuminate\Mail\Mailable {
    
        /**
        * Send the message using the given mailer.
        *
        * @param  \Illuminate\Contracts\Mail\Mailer  $mailer
        * @return void
        */
        public function send(MailerContract $mailer)
        {
            $this->withSwiftMessage(function ($message) {
                $headers = $message->getHeaders();
                $headers->addTextHeader('mime', 'text/calendar');
            });
    
            parent::send($mailer);
        }
    }
    

    方法,就像使用标准一样 照明\邮件\可邮寄 但最终的结果是,你的类将承载你实际需要的额外信息。