0

我创建了一个名为 SendAutoEmail 的命令,我正在运行该命令

php工匠发送:自动电子邮件

命令工作正常但它没有发送电子邮件,我已将直接电子邮件功能添加到命令中,并且还尝试将电子邮件功能添加到控制器方法中并将该控制器调用到命令文件中,但电子邮件未发送但如果我尝试调用同样的方法通过 url 成功发送电子邮件,我不知道是什么问题,这里是代码

命令>SendAutoEmail.php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Http\Controllers\PassportController;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $controller = new PassportController();//your controller name
        $controller->sendEMail();
        dd($controller);
        \Log::info('Cron is working fine!');
        
        $this->info('Send:AutoEmail cron Command RUn Seccessfully');
        return 0;
    }
}

控制台>内核.php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Console\Commands\SendAutoEmail;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        SendAutoEmail::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('send:autoemail')
    }
}

以及我尝试发送电子邮件的控制器方法。

public function sendEMail(){
    
    $alerts = [
        'passport_no'   =>  'ex12312312',
        'name'  =>  'test name',
        'expiry_date'   =>  '01-11-2020',
        'id_no_cnic'    =>  '12312-3123123-1'
    ];
    $emailSent = Mail::to('test.email@gmail.com')->send(new ExpireAlert($alerts));
    DB::table('tbl_test')->insert(
        ['data_text' => 'test data new']
    );
    dd($emailSent);
    // here on dd($emailSent) i'm getting 0 in response
    DB::table('tbl_test')->insert(
        ['data_text' => 'test data']
    );
    print_r($alerts);
}
4

1 回答 1

0

你有没有运行调度程序?

php工匠时间表:运行

然后您应该在数据库的队列表中看到您的邮件。

现在,执行队列:

php工匠队列:工作

在生产中,推荐使用包Supervisor。它的作用是确保工作人员始终在运行。


来源:https ://laravel.com/docs/8.x/queues#running-the-queue-worker

于 2020-09-23T07:00:03.347 回答