Laravel 5.6 Как запланировать очередь электронной почты - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь запланировать электронную почту, чтобы напомнить пользователям, которые должны выполнить задачи, которые должны быть выполнены завтра Я сделал пользовательскую команду email:reminder. Вот мой код в пользовательской команде:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Todo;
use Illuminate\Support\Facades\Mail;

class SendReminderEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'email:reminder';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Remind users of items due to complete next day';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        /*
         * Send mail dynamically
         */

        /*
         * hardcoded email
         */
        Mail::queue('emails.reminder', [], function ($mail) {
            $mail->to('example@email.com')
                ->from('todoreminder@gmail.com', 'To-do Reminder')
                ->subject('Due tomorrow on your To-do list!');
        }
        );


        $this->info('Reminder email sent successfully!');
    }
}

Я жестко закодировал письмо, чтобы проверить его, но когда я запустил php artisan email:reminder, я получил исключение

[InvalidArgumentException]     
  Only mailables may be queued.

Затем я проверил документацию Laravel, но Планирование задач и Очередь электронной почты - это отдельная тема.

  • Как я могу добиться отправки очереди электронной почты с помощью планирования задач в Laravel 5.6 пожалуйста?
  • Также, как я могу передать данные, то есть задачи из базы данных, в мою электронную почту посмотреть пожалуйста?

Любая помощь очень ценится!

Ответы [ 3 ]

0 голосов
/ 06 мая 2018
 Mail::queue('emails.reminder', [], function ($mail) {
            $mail->to('example@email.com')
                ->from('todoreminder@gmail.com', 'To-do Reminder')
                ->subject('Due tomorrow on your To-do list!');
        }
        );

устарело с Laravel 5.3. Только Mailables могут помещаться в очередь, и он должен реализовывать интерфейс ShouldQueue.

Для запуска заданий необходимо настроить queue driver и запустить php artisan queue:work

0 голосов
/ 06 мая 2018

Использование ядра консоли для планирования заданий в очереди легко сделать. Laravel предлагает несколько методов-оболочек, которые делают интеграцию cron тривиальной. Вот базовый пример:

$schedule->job(new SendTodoReminders())->dailyAt('9:00');
0 голосов
/ 06 мая 2018

Вы должны создать команду, которая будет действовать точно так же, как вы описали, но без планирования. Вы можете использовать crontab для планирования или какой-либо другой планировщик задач.

Следовали ли вы документации Ларавеля о рассылке? https://laravel.com/docs/5.6/mail

Как только вы попадете в секцию Отправка почты , вы не должны создавать контроллер, а вместо этого команду.

Когда эта команда сработает, добавьте ее в планировщик задач (например, crontab) для ежедневного запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...