【问题标题】:laravel 5.3 sendgrid categorieslaravel 5.3 sendgrid 类别
【发布时间】:2017-03-14 02:47:20
【问题描述】:

在 laravel 5.2 中这工作得很好,但是自从迁移到 5.3 后,我在获取电子邮件中发送的类别时遇到了问题。

public function build()
    {
        return $this->view('mail.enquiry')
            ->getSwiftMessage()->getHeaders()->addTextHeader('X-SMTPAPI', json_encode(array("category" => array(env('BUSINESS_NAME')))))
            ->subject('Website Enquiry')
            ->to(env('MAIL_DEFAULT_TO_EMAIL'), env('MAIL_DEFAULT_TO_NAME'))
            ->from(env('MAIL_DEFAULT_FROM_EMAIL'), env('MAIL_DEFAULT_FROM_NAME'))
            ->replyTo(\Request::get('email'), \Request::get('full_name'));
    }

我收到这个错误

BadMethodCallException in Mailable.php line 525:
Method [getSwiftMessage] does not exist on mailable.

此代码中的所有内容都可以正常工作,但添加此行后立即中断:

    ->getSwiftMessage()->getHeaders()->addTextHeader('X-SMTPAPI', json_encode(array("category" => array(env('BUSINESS_NAME')))))

【问题讨论】:

    标签: laravel email


    【解决方案1】:

    要实现您的目标,您可以使用withSwiftMessage() 方法。

    此方法接受一个回调,该回调将传递SwiftMessage 的实例:

    ->withSwiftMessage(function ($message) {
        $message->getHeaders()->addTextHeader('X-SMTPAPI', json_encode(array("category" => array(env('BUSINESS_NAME')))));
    })
    

    所以你的方法看起来像:

    public function build()
    {
        return $this->view('mail.enquiry')
            ->withSwiftMessage(function ($message) {
                $message->getHeaders()->addTextHeader('X-SMTPAPI', json_encode(array("category" => array(env('BUSINESS_NAME')))));
            })
            ->subject('Website Enquiry')
            ->to(env('MAIL_DEFAULT_TO_EMAIL'), env('MAIL_DEFAULT_TO_NAME'))
            ->from(env('MAIL_DEFAULT_FROM_EMAIL'), env('MAIL_DEFAULT_FROM_NAME'))
            ->replyTo(\Request::get('email'), \Request::get('full_name'));
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      自从我在 Laravel 8 上寻找解决方案时访问了这个问题,我正在向已经接受的答案添加更多信息:

      现在在 Laravel 8 中,您可以按照此处的说明进行操作:https://sendgrid.com/docs/for-developers/sending-email/laravel/ 并检查标题为“添加类别或自定义字段”的部分。

      它仍然使用 withSwifthMessage() - laravel 网站上的更多信息:https://laravel.com/docs/8.x/mail#customizing-the-swiftmailer-message

      它的要点类似于已经接受的答案,但也提供了一些很好的帮助和更清晰的代码:

      在您的build() 函数中:

      $headerData = [
          'category' => 'category',
          'unique_args' => [
              'variable_1' => 'abc'
          ]
      ];
      
      $header = $this->asString($headerData);
      
      $this->withSwiftMessage(function ($message) use ($header) {
            $message->getHeaders()
                    ->addTextHeader('X-SMTPAPI', $header);
      });
      
      return $this->view('emails.test')
                      ->from($address, $name)
      

      助手:

      private function asJSON($data)
      {
          $json = json_encode($data);
          $json = preg_replace('/(["\]}])([,:])(["\[{])/', '$1$2 $3', $json);
      
          return $json;
      }
      
      
      private function asString($data)
      {
          $json = $this->asJSON($data);
      
          return wordwrap($json, 76, "\n   ");
      }
      

      可能对某人有用。

      【讨论】:

        猜你喜欢
        • 2016-01-22
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 2017-03-28
        相关资源
        最近更新 更多