我正在运行一个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版本。我找不到这里的行为不同的原因。
答案 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
来检查更新是否得到反映。