В настоящее время у меня проблемы с письмом для сброса пароля, созданным make:auth in Laravel 5.6. Мое приложение размещено на Heroku. В моей локальной среде все работает нормально. Я установил правильные значения в переменных конфигурации в Heroku, то же самое в моем локальном .env файле:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=bla
MAIL_ENCRYPTION=tls
Я прочитал здесь, что мне нужно жестко закодировать значения внутри app/mail.php вместо ссылки на файл .env, потому что Heroku не распознает/не поймет эту ссылку
'password' => env('MAIL_PASSWORD')
Но тогда мои данные будут видны внутри репозитория GitHub.
Что я здесь делаю неправильно?
Обновлено:
Принятый ответ - это путь, нужно использовать надстройку для отправки писем в Heroku. Тем не менее, я нашел способ заставить его работать с gmail после настройки sendgrid ;)
- Use `Port 465 with ssl` as encryption.
- Allow `less secure apps` access to my account.
- Visit `http://www.google.com/accounts/DisplayUnlockCaptcha` and sign in with your Gmail username and password.
После этих действий все заработало. Может быть, это полезно для других.
РЕДАКТИРОВАТЬ2:
Я перенес Laravel с версии 5.x на 8 и снова столкнулся с проблемами, поэтому мне пришлось снова изменить свой подход к gmail.
Мне пришлось:
- Allow `less secure apps` access to my account.
- Enable two step verification and create an App Password like in the accepted answer of this question: https://stackoverflow.com/questions/42558903/expected-response-code-250-but-got-code-535-with-message-535-5-7-8-username
- Change Port back to 587 and tls again
- Visit `http://www.google.com/accounts/DisplayUnlockCaptcha` and sign in with your Gmail username and password.
Ваше решение работает, просто нужно изменить порт и тип шифрования. Спасибо!






Не используйте Gmail в рабочей среде¹.
Gmail не предназначен для работы в качестве шлюза SMTP для вашего приложения. Вместо этого используйте один из многих почтовые надстройки, которые рекомендует Heroku. Mailgun и SendGrid очень популярны, но есть и много других.
Эти инструменты предназначены для отправки почты для приложений. У них будет гораздо меньше шансов отклонить вашу почту, и при правильной настройке вероятность того, что ваша почта попадет в спам-фильтры, будет намного меньше. В большинстве из них есть пошаговые руководства по настройке, и я призываю вас следовать им. Не пропустите функции защиты от спама SPF и ДКИМ.
I have read here that I have to hard-code the values inside
app/mail.phpinstead of referencing the.envfile because Heroku wouldn't recognize/understand this reference'password' => env('MAIL_PASSWORD')
Это неправильно.
Вы говорите, что установили переменные конфигурации на Heroku, и это заполняет среду. Файл .env — это просто удобный локальный способ сделать то же самое. Какой бы почтовый аддон вы ни выбрали, он автоматически установит для вас одну или несколько переменных среды, и вы должны использовать их в своем коде.
¹Возможно, вам также не следует использовать его в разработка, но там это не проблема. Я призываю вас вместо этого использовать что-то вроде Mailtrap (облачное) или Mailcatcher (локальное).
Спасибо за помощь. Я хочу использовать Gmail только для ссылки для сброса пароля, не более того. Я не понимаю, почему это не сработает? Я взглянул на mailgun, и я должен предоставить данные своей кредитной карты, если я хочу отправлять письма кому-либо. Это не совсем удобно. Это нормально? Я понимаю, что за этим стоит защита от спамеров, но все же
Это не работает, потому что это не то, для чего он предназначен. Чтобы люди не использовали свои SMTP-серверы для рассылки спама, Google почти наверняка обнаруживает запросы, поступающие от популярных облачных хостов (таких как Heroku, работающий на AWS), и отказывается их обрабатывать. Настроить Sendgrid чрезвычайно просто, и если вы просто используете его для случайных ссылок для сброса пароля, вам, вероятно, подойдет их бесплатный план. Если вы не хотите использовать ни одну из этих служб, вы можете найти другую, предназначенную для доставки электронной почты приложениям (не людям). Но не используйте Gmail и тому подобное.
Имеет смысл, спасибо! Это определенно выглядит легко, да. Итак, Laravel будет автоматически использовать sendgrid после его настройки и добавления ключей конфигурации vars/api? Должен ли я изменить какой-либо из моего php-кода или сделать что-то еще, кроме этого?
Я не совсем уверен, что вам нужно изменить, но переход с Gmail на что-то вроде Sendgrid или Mailgun определенно является решением. Есть кажется, что Laravel изначально поддерживает множество опций и Поддержка SendGrid тоже выглядит относительно просто.. Если вы застряли во время реализации, не стесняйтесь вернуться и задать конкретный вопрос о проблеме, в идеале предоставив код, который вы пробовали.
используйте getenv('ENV_VARIABLE') может вам помочь.