#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.