Laravel 5.7 - электронные письма не отправляются через командную строку - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над проектом 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.');
        }


    }


}

В проекте запущена версия 6.0.2 пакета swiftmailer.Я не могу найти причину, почему поведение здесь другое.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Пожалуйста, используйте SMTP для отправки писем с Swiftmailer

MAIL_DRIVER=smtp
0 голосов
/ 26 февраля 2019

Запустите env в каталоге приложения, чтобы проверить, проходят ли переменные окружения.

Убедитесь, что ваше свойство MAIL_DRIVER в .env установлено на smtp.

Вы также можете попробовать tls для MAIL_ENCRYPTION.

РЕДАКТИРОВАТЬ:

Я только что заглянул в файл AbstractSmtpTransport.php SwiftMailer и около строки 445 есть это:

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

Это говорит мне о том, что вы не получили ответа от почтового сервера.

Итак, еще раз рекомендую проверить вывод env из каталога приложения.Если переменные среды не отображаются, попробуйте обновить их и запустить: php artisan cache:clear php artisan config:clear

И еще раз запустите env, чтобы проверить, отражаются ли обновления.

0 голосов
/ 26 февраля 2019

Необходимо проверить конфигурацию консоли, чтобы убедиться, что конфигурация электронной почты является общей для экземпляра приложения и экземпляра консоли приложения.

PS: мне не хватает оценки репутации, чтобы комментировать

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