Laravel 5.7-电子邮件未通过命令行发送

时间:2019-02-26 15:28:36

标签: laravel email command command-line-interface

我正在运行一个5.7 laravel项目,可以毫无问题地从控制器发送电子邮件了。

但是,当我尝试使用相同的逻辑从命令行(从命令行启动)发送电子邮件时,不会发送电子邮件,并且出现以下错误:

In AbstractSmtpTransport.php line 445:

  Expected response code 220 but got an empty response

这是我的命令代码:

<?php

namespace App\Console\Commands;

use App\Email_confirmation;
use Illuminate\Console\Command;
use App;
use Carbon\Carbon;
use Illuminate\Support\Facades\Mail;
use App\Mail\ShopOrderConfirmation;


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

    /**
     * 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 mixed
     */
    public function handle()
    {

        $ec_global = Email_confirmation::where("due_date" ,">", Carbon::now('Europe/Paris'))->get();

        if (!$ec_global->isEmpty()) {
            foreach ($ec_global as $ec) {
                if (App::environment('production')) {
                    $subject = $ec->shop_name . " - Order confirmation";
                    Mail::to($ec->contact_email)
                        ->send(new ShopOrderconfirmation($ec->contact_name, $subject, $ec->shop_name, $ec->order_date));
                }
                elseif (App::environment('development','test')) {
                    $subject = $ec->shop_name . " - Order confirmation - TEST";
                    Mail::to("me@whatever.net")
                        ->send(new ShopOrderconfirmation($ec->contact_name, $subject, $ec->shop_name, $ec->order_date));
                }
            }
        }
        else {
            $this->info('Empty.');
        }


    }


}

该项目正在运行swiftmailer软件包的6.0.2版本。我找不到这里的行为不同的原因。

3 个答案:

答案 0 :(得分:0)

您需要检查控制台配置,以确保在应用程序实例和应用程序的控制台实例之间共享电子邮件配置。

PS:我的声誉得分不足,无法发表评论

答案 1 :(得分:0)

请使用SMTP通过Swiftmailer发送电子邮件

MAIL_DRIVER=smtp

答案 2 :(得分:0)

在您的应用目录中运行env,以检查环境变量是否通过。

确保将.env中的MAIL_DRIVER属性设置为smtp

您也可以为tls尝试MAIL_ENCRYPTION

编辑:

我只是查看了SwiftMailer的AbstractSmtpTransport.php文件,在第445行附近是这样的:

if (!$response) {
    $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response'));
}

这告诉我,您没有收到邮件服务器的回复。

因此,我再次建议您检查app目录中env的输出。如果没有反映您的环境变量,请尝试更新它们并运行: php artisan cache:clear php artisan config:clear

然后再次运行env来检查更新是否得到反映。