/usr/libexec/postfix/smtp не отправляет почту с помощью Laravel в macOS

#php #laravel #macos #smtp #laravel-8

Вопрос:

У меня есть проект Laravel 8, с помощью которого я хочу отправлять электронные письма. Я разрабатываю его на macOS и хочу его протестировать, но он не работает, но не даст никаких ошибок. (Я заменил конфиденциальные данные на ******** )

.env

 MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=********@gmail.com
MAIL_PASSWORD=********
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=********@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
 

Примечание: Я проверил эти настройки, я также проверил другие рабочие настройки SMTP. Так что это не проблема конфигурации в этом файле

mail.php

 /// ...

    'default' => env('MAIL_MAILER', 'mail'),

/// ...

    'mailers' => [
        'smtp' => [
            'transport' => 'mail',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
        ],

/// ...

    ],

/// ...

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
            resource_path('views/emails'),
        ],
    ],

/// ...
 

MailController.php

 namespace AppHttpControllersAPI;
use IlluminateHttpRequest;
use AppHttpControllersController as Controller;
use IlluminateSupportFacadesMail;

class MailController extends Controller
{

    public function testMail(Request $request)
    {
        $email = '********@live.com';
        $data = [
            'title' => 'Test mail'
        ];

        Mail::send(['html' => 'emails.testMail'], $data,
            function ($message) use ($email, $data) {
                $message->to($email)
                ->subject($data['title']);
        });

        $response = [
            'error' => 0,
            'to' => $email,
            'data' => $data,
        ];
        return response()->json($response, 200);
    }
}
 

Примечание: Существует шаблон блейда, содержащий только HTML для целей тестирования на resources/views/emails/testMail.blade.php. Я также добавил соответствующий маршрут ПОЛУЧЕНИЯ.

Когда я получаю доступ к конечной точке в Postman, я получаю

 {
    "error": 0,
    "to": "********@live.com",
    "data": {
        "title": "Test mail"
    }
}
 

Появился маленький снитч, спрашивающий , хочу ли я разрешить доступ к /usr/libexec/postfix/smtp smtp.gmail.com , поэтому я знаю, что вызов проходит. Я предоставил процессу все права на доступ к любому серверу и повторил его, но почта никогда не достигнет места назначения.

Да, я проверил папку со СПАМОМ. Да, я проверил другие учетные данные. Да, я тестировал ручную доставку между обеими учетными записями. Да, я тестировал с отключенным Маленьким Снитчем, полностью. Да, я проверил laravel.log, и он ничего не показывает.

Я заметил, что я не получу никакой ошибки от Laravel, когда я введу неверную информацию в файл .env (за исключением случаев, когда я изменюсь MAIL_MAILER ).

Как я могу получить вывод из процесса SMTP, чтобы узнать, в чем проблема? Как я могу устранить эту проблему?

Комментарии:

1. Проверьте в приложении Чарльза. По крайней мере, вы можете определить, где находится ошибка.

2. @MarekH Я установил Wireshark и использую фильтр tcp.port == 465 || udp.port == 465 . Хотя я получаю данные при отправке почты с помощью SinriMailTextPost, я не получаю никаких пакетов, когда запускаю свой код Laravel с теми же учетными данными SMTP. Когда я фильтрую IP ( ip.addr == 64.233.184.108 ) из рабочего случая, когда я использую SinriMailTextPost, в Wireshark на этом IP-адресе нет подключения, когда я запускаю свой код Laravel, но маленький Снитч сообщает о доступе к live-com.olc.protection.outlook.com и gmail-smtp-in.l.google.com .

3. Вы пробовали использовать адрес электронной почты, отличный от outlook (попробуйте несколько)? Я думаю, что он заблокирован. howtoforge.com/community/threads/…

4. @MarekH Да, я пробовал использовать электронные письма AWS, web.de электронные письма и т. Д. (отправка / получение, возможны все комбинации). Как уже было сказано, все доставки проходят успешно с помощью SinriMailTextPost, но /usr/libexec/postfix/smtp даже не отправляются посылки, которые я мог бы захватить с помощью Wireshark. Я начинаю верить, что обнаружил ошибку в smtp, которая требует некоторых экзотических обстоятельств, которые я предоставляю, потому что это машина разработчика с большим количеством установленных вещей. Как я могу копнуть глубже, пожалуйста? Мне нужно, чтобы это работало локально, прежде чем я разверну код на AWS.