Невозможно отправить электронное письмо с помощью sendgrid с Laravel 5.4 и обнаружила ошибку

Я новичок в 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)

Я не могу понять, в чем проблема. Пожалуйста помоги.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
0
741
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

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'] );

Надеюсь, это решит проблему.

Извините! путь - views / emails / templateUserRegister.blade.php в моем коде. исправлено выше

Prak 22.10.2018 08:16

Я сделал, как вы предположили, но все равно получил такое же сообщение об ошибке. Htmlspecialchars () ожидает, что параметр 1 будет строкой, заданным объектом (View: C: \ xampp \ htdocs \ mysite \ resources \ views \ emails \ templateUserRe‌ gister.blade.php)

Prak 22.10.2018 20:44

Он работает на локальном НЕ на веб-сайте, используя то же имя пользователя и пароль. он выдает ошибку как ============================= Ожидаемый код ответа 250, но получен код «535» с сообщением «535- 5.7.8 Имя пользователя и пароль не принимаются. Подробнее на 535 5.7.8 support.google.com/mail/?p=BadCredentials c69-v6sm9501842pfg.2 - gsmtp

Prak 23.10.2018 21:36

Какой хостинг вы используете? Это 000webhostapp?

Oukaasha Habib 24.10.2018 08:10

Другие вопросы по теме