Не удалось отправить электронное письмо с использованием sendgrid с Laravel 5.4 и обнаружил ошибку - PullRequest
0 голосов
/ 21 октября 2018

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

}
}

- Создан файл шаблона представления / электронные письма / 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 будет строкой, объект задан (View: C: \ xampp \ htdocs \ bowoot \ resources \ views \ emails \ templateUserRegister.blade.php) в helpers.php (строка 547)

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

1 Ответ

0 голосов
/ 21 октября 2018

Если предоставленная информация верна, вы возвращаете представление emails.templateUserRegister, и оно должно быть email.templateUserRegister.(Обратите внимание) Причина, по которой я это говорю, заключается в том, что это ваш путь просмотра.

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 для mail , он говорит следующее:

Примечание: Переменная $ message всегда передается в представления электронной почты и позволяет встроенное вложение вложений.Поэтому лучше избегать передачи переменной сообщения в полезную нагрузку вашего представления.

Поэтому, чтобы исправить проблему, просто измените $message на другое имя, например $data или $text.Измените это:

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

на следующее:

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

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

...