Электронная почта в Laravel - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь отправить электронное письмо в Laravel. Это работает привередливо, чтобы сказать по крайней мере. Есть пара классов для отправки электронной почты для разных условий. Единственной разницей будет разметка отправленной электронной почты и блейд-файл, в который отправляются данные перед отправкой. Я попытался использовать use Mail; в контроллере, с которого я его отправляю, с \Mail::(... и use Illuminate\Support\Facades\Mail; с Mail::(... и наоборот. Так что это не так.

Вот почтовые файлы:

Файл ToHR:

<?php

namespace App\Mail;

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

class toHR extends Mailable
{
    use Queueable, SerializesModels;

    public $user;
    public $job;
    public $jobCount;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user,$job,$jobCount)
    {
        $this->user = $user;
        $this->job = $job;
        $this->jobCount = $jobCount;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('mail.toHR');
    }
}

Файл ToHRFirst:

<?php

namespace App\Mail;

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

class toHRFirst extends Mailable
{
    use Queueable, SerializesModels;

    public $user;
    public $job;
    public $jobCount;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user,$job,$jobCount)
    {
        $this->user = $user;
        $this->job = $job;
        $this->jobCount = $jobCount;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('mail.toHRFirst');
    }
}

Имой тестовый файл JobCreated:

<?php

namespace App\Mail;

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

class JobCreated extends Mailable
{
    use Queueable, SerializesModels;

    public $user;
    public $job;
    public $jobCount;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user,$job,$jobCount)
    {
        $this->user = $user;
        $this->job = $job;
        $this->jobCount = $jobCount;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('mail.job-created');
    }
}

Они будут все одинаковыми, но ошибка возникает. Что дает? Я что-то пропустил? Буду признателен за любую помощь, просто направьте меня в правильном направлении.

Код, который я использую для отправки электронной почты: Используемые переменные получают значения из запросов, которые являются довольно длинными, но в любом случае они не являются проблемой.

Ver1:


        Mail::to($user->email)->send(

            new JobCreated($user,$job,$jobCount)

        );

Ver2:


        Mail::to($user->email)->send(

            new toHRFirst($user,$job,$jobCount)

        );

Ver3:


        Mail::to($user->email)->send(

            new toHR($user,$job,$jobCount)

        );

Отправка работает, если используется первая версия. Другие не могут быть найдены, и это ошибка.

1 Ответ

2 голосов
/ 09 ноября 2019

Попробуйте переименовать ваши файлы в соответствии с соглашением Laravel;

Вы можете видеть, что файл JobCreated имеет class JobCreated. Вы должны соблюдать прописные буквы:

  • Переименуйте файл ToHR.php в ToHr.php, затем:
  • Переименуйте класс class toHR в class ToHr

  • Переименуйте файл ToHRFirst.php в ToHrfirst.php, затем:

  • Переименуйте класс class toHRFirst в class ToHrfirst

Или, если вы хотите сохранить заглавные буквы, просто переименуйте классы следующим образом:

  • class toHR в class ToHR
  • class toHRFirst в class ToHRFirst

Наконец, не забудьте импортировать свой класс работы вверху файла контроллера (или везде, где вы используете метод Mail:

use App\Mail\ToHR;

и

use App\Mail\ToHRFirst;

...