无法使用带有Laravel 5.4的sendgrid发送电子邮件并发现错误

时间:2018-10-21 10:51:55

标签: laravel sendgrid

我是sendgrid的新手,并且想将sendgrid与Laravel集成。我在这里尝试 -在app \ Mail \ SendgridEmail.php

中添加了以下代码
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendgridEmail extends Mailable
{
use Queueable, SerializesModels;

public $data;

public function __construct($data)
{
    $this->data = $data;
}

public function build()
{
    $address = 'demotest@gmail.com';
    $subject = 'This is a demo!';
    $name = 'Sam';

    return $this->view('emails.templateUserRegister')
                ->from($address, $name)                    
                ->subject($subject)
                ->with([ 'message' => $this->data['message'] ]);

}
}

-创建的模板文件views / emails / templateUserRegister.blade.php为

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="utf-8">
</head>
<body>
    <h2>Bowoot Email</h2>
    <p>{{ $message }}</p>
</body>
</html>

-向控制器添加了以下代码

use App\Mail\SendgridEmail; // on top of class

public function sendemail()
{       
    $data = array('message' => 'This is a SendgridEmail test!');

    Mail::to('user@gmail.com')->send(new SendgridEmail($data));
}

当我运行代码时,我发现如下错误消息

  

(2/2)ErrorException   htmlspecialchars()期望参数1为字符串,给定对象(视图:C:\ xampp \ htdocs \ bowoot \ resources \ views \ emails \ templateUserRegister.blade.php)   在helpers.php中(第547行)

我无法理解问题所在。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果提供的信息准确无误,则说明您正在返回视图emails.templateUserRegister,该视图应该为email.templateUserRegister。 (注意s) 我说这的原因是因为这是您的视图路径。

  

views / email / templateUserRegister.blade.php

它肯定没有's'。

修改

代替这样做:

return $this->view('emails.templateUserRegister')
                ->from($address, $name)                    
                ->subject($subject)
                ->with([ 'message' => $this->data['message'] ]);

尝试一下:

$message = $this->data['message'];
return $this->view('emails.templateUserRegister')
                ->from($address, $name)                    
                ->subject($subject)
                ->with('message', $message);

然后在

中制作$data
  

app \ Mail \ SendgridEmail.php

privateprotected

如果这不起作用,请尝试从控制器作为字符串而不是作为数组发送$data。其余代码将保持不变,此行将更改:

->with([ 'message' => $this->data['message'] ]);

收件人:

->with('message', $this->data);

您仍然需要将$data的访问权限更改为privateprotected

编辑2

如果您查看Laravel的文档中的mail,它会说:

  

注意:$ message变量始终传递到电子邮件视图,并允许   附件的嵌入式嵌入。因此,最好避免通过   您的视图有效负载中的message变量。

因此,要解决此问题,只需将$message更改为其他名称,例如$data$text。更改此:

->with([ 'message' => $this->data['message'] ]);

对此:

->with( 'text', $this->data['message'] );

我希望这可以解决问题。