Я новичок в 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 = '[email protected]';
$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('[email protected]')->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)
Я не могу понять, в чем проблема. Пожалуйста помоги.






Если предоставленная информация верна, вы возвращаете представление 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
private или protected.
Если это не сработает, попробуйте отправить $data с контроллера в виде строки, а не массива. Остающийся код останется прежним, и эта строка изменится:
->with([ 'message' => $this->data['message'] ]);
к:
->with('message', $this->data);
И вам еще нужно изменить доступ $data к private или protected.
РЕДАКТИРОВАТЬ 2
Если вы проверите документацию Laravel для Почта, там написано следующее:
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'] );
Надеюсь, это решит проблему.
Я сделал, как вы предположили, но все равно получил такое же сообщение об ошибке. Htmlspecialchars () ожидает, что параметр 1 будет строкой, заданным объектом (View: C: \ xampp \ htdocs \ mysite \ resources \ views \ emails \ templateUserRe gister.blade.php)
Он работает на локальном НЕ на веб-сайте, используя то же имя пользователя и пароль. он выдает ошибку как ============================= Ожидаемый код ответа 250, но получен код «535» с сообщением «535- 5.7.8 Имя пользователя и пароль не принимаются. Подробнее на 535 5.7.8 support.google.com/mail/?p=BadCredentials c69-v6sm9501842pfg.2 - gsmtp
Какой хостинг вы используете? Это 000webhostapp?
Извините! путь - views / emails / templateUserRegister.blade.php в моем коде. исправлено выше