gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:17:15 28 4
gpt4 key购买 nike

我是 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 as
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<h2>Bowoot Email</h2>
<p>{{ $message }}</p>
</body>
</html>

- 将以下代码添加到 Controller
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() expects parameter 1 to be string, object given (View: C:\xampp\htdocs\bowoot\resources\views\emails\templateUserRegister.blade.php) in helpers.php (line 547)



我无法理解问题是什么。请帮忙。

最佳答案

如果提供的信息准确无误,您将返回一个 View emails.templateUserRegister应该是 email.templateUserRegister . (注意 s)
我这样说的原因是因为这是您的 View 路径。

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从 Controller 作为字符串而不是数组。其余代码将保持不变,这一行将发生变化:
->with([ 'message' => $this->data['message'] ]);

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

并且您仍然需要更改 $data 的访问权限至 privateprotected .

编辑 2

如果您查看 Laravel 的文档 mail ,它是这样说的:

Note: A $message variable is always passed to e-mail views, and allows the inline embedding of attachments. So, it is best to avoid passing a message variable in your view payload.



所以要解决这个问题,只需更改 $message到其他名称,如 $data$text .改变这个:
->with([ 'message' => $this->data['message'] ]);

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

我希望这可以解决问题。

关于laravel - 无法使用带有 Laravel 5.4 的 sendgrid 发送电子邮件并发现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914510/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com