Попытка заставить электронную почту Laravel 5 работать


154

Я пытаюсь отправить электронное письмо указанному пользователю, введя URL-адрес, но получаю следующую ошибку:

Swift_TransportException в строке AbstractSmtpTransport.php 383: ожидаемый код ответа 250, но получен код «530» с сообщением «530 5.7.1 Требуется аутентификация

Пока что я просто пытаюсь заставить его работать с Gmail. Как я могу заставить это работать?

Это то, что я до сих пор: mail.php

<?php
    return [
        'driver' => env('MAIL_DRIVER',' smtp'),
        'host' => env('MAIL_HOST', 'smtp.gmail.com'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' =>"MyUsername@gmail.com" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('MyUsername@gmail.com'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

Вот что я имею в маршрутах:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('example@gmail.com', 'HisName')->subject('Welcome!');
    });
});

Вот что у меня в контроллере:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}

И это то, что находится в моем файле .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

4
Используйте mailtrap.io для тестирования
бросьте

Хороший совет на mailtrap.io @roll
Бен Эверард,

Я получил точно такую ​​же ошибку при использовании mailtrap.io
luisfer

Ответы:


243

Я знаю, что сейчас это работает для вас @ Vantheman6, но это то, что сработало для меня, на случай, если для кого-то это то же самое.

Я добавил в свой файл .env сведения о почтовой службе, которую я использую. Поэтому убедитесь, что следующие детали

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

в файле .env точны.

ПРИМЕЧАНИЕ. Не забудьте перезапустить сервер после редактирования файла .env, чтобы он выбрал новые данные, которые вы туда поместили.

Если вы не перезапустите сервер, файл .env по-прежнему будет отображать старые почтовые данные в приложении, даже если вы внесли изменения, которые могут вызвать эту ошибку.


59
Вау, эта «записка» спасла меня. Я не знал, что переменные ENV кэшировались при запуске!
Гербен Якобс

Не могли бы вы обновить ответ - и выделить файл перезапуска вместо файла конфигурации?
mrwaim

2
@ mrwaim, я думал, что перезапуск сервера - именно то, что я указал в примечании, если я не понимаю, что вы намекаете.
Осей-Бонсу Кристиан

1
Я бы предложил удалить все до «Примечание:», что помогло это примечание, а не вещи раньше. Я хотел бы предложить, если вы хотите сохранить другие части, поместите их после примечания. 3 Люди проголосовали за комментарий «Заметка», поэтому заметка, вероятно, им тоже помогла.
mrwaim

22
Если вы ранее кэшировали свою конфигурацию, php artisan config:cacheто перезапуск сервера не подберет обновленную конфигурацию. Попробуйте php artisan config:cacheснова
Дарронз

53

Моя конфигурация файла .env такая же, как для laravel 5.1

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls

Здесь самое важное, что я создал специальный пароль для приложения gmail (16 цифр).

Мне нужно раскрыть еще одну вещь, так как не повезло ни одной конфигурации. То есть всякий раз, когда я менял .env файл, нужно запускать эту команду

php artisan config:cache

И это самое главное, потому что без этой команды laravel выполняет предыдущие настройки из своего кэша. Мне потребовалось более 10 часов, чтобы понять.


1
Я продолжал использовать, php artisan cache:clearкогда php artisan config:cacheэто то, что решил это для меня. Спасибо!
Тимгавин

4
проголосовал из-за вашей заметки оphp artisan config:cache
Дарронц

35

Вы получаете ошибку аутентификации, потому что имя пользователя и пароль в вашем файле конфигурации установлены неправильно.

Изменить это:

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),

К этому:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

envМетод проверяет ваш .env файл. В вашем файле .env вы вызываете их MAIL_USERNAME, так что это то, что вам нужно передать envметоду.

Один совет по устранению неполадок: добавьте, dd(Config::get('mail'));чтобы вы могли видеть фактическую сгенерированную конфигурацию . Это поможет вам определить подобные проблемы и точно знать, какую информацию Laravel собирается использовать. Так что вы можете временно остановить это в вашем тестовом маршруте, чтобы проверить, что у вас есть:

Route::get('test', function()
{
    dd(Config::get('mail'));
});

Поэтому я изменил свой файл mail.php, чтобы отразить ваши предложения `'username' => env ('MAIL_USERNAME'),` и 'password' => env('MAIL_PASSWORD'), которые я нахожу интересными, потому что везде мне говорят, что для этого нужно ввести свой адрес электронной почты и пароль. Я все еще получаю ошибку Swift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required. I'm sorry but where do i actually place the " dd(Config::get('mail'));. каталог Config содержит много файлов
Vantheman6

Смотрите мой обновленный ответ, с примером того, как проверить ваш конфиг.
jszobody

это удивительно, я все еще получаю ошибку, но я действительно могу видеть то, что это делает. По какой-то причине он пытается передать `" host "=>" mailtrap.io "` в env, хотя в mail php я говорю'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

Дважды проверьте MAIL_HOSTв вашем файле
.env

Это точно. MAIL_HOST=smtp.gmail.com В итоге я удалил все env из каждой части файла mail.php. И теперь правильная информация проходит через. OMG Спасибо, это сработало. Вы мужчина
Vantheman6


13

Наконец-то я добрался! Просто чтобы поделиться, есть больше настроек, чем просто .env

Это .env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config / mail.php также необходимо ввести адрес и имя для его работы.

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

11

Если у вас когда-нибудь возникли те же проблемы, и вы все перепробовали в Интернете, и это не сработало, вероятно, файл кэша конфигурации отправляет неверную информацию. Вы можете найти его в bootstrap / cache / config.php. Убедитесь, что учетные данные прямо там. Мне потребовалась неделя, чтобы понять это. Я надеюсь, что это поможет кому-нибудь когда-нибудь.


Вы, сэр, заслужили хороший Бордо, большое спасибо! Я заметил, что имя пользователя и пароль были пустыми в этом файле, даже если я заполнил их в двух соответствующих файлах. Оттуда я знал, что делать! Мерси!
Грегорди

СПАСИБО! Серьезно я отлаживал в течение часа без КЛЕЯ, кроме ЭТОГО !!! ЭТО
Ахмад Альфи,

11

В целях разработки https://mailtrap.io/ предоставляет вам все настройки, которые необходимо добавить в файл .env. Например:

Host:   mailtrap.io
Port:   25 or 465 or 2525
Username:   cb1d1475bc6cce
Password:   7a330479c15f99
Auth:   PLAIN, LOGIN and CRAM-MD5
TLS:    Optional

В противном случае для реализации вы можете получить учетные данные smtp для добавления в файл .env из почты (например, gmail n all)

После добавления обязательно перезагрузите сервер


После добавления обязательно перезапустите сервер. Это предложение решило мою проблему.
Hos Mercury

8

Это случается и со мной.

Это потому, что когда мы редактируем .envфайл, нам нужно перезапустить сервер. Просто остановите ток php artisan serveи запустите его снова. Это будет работать точно.

Если все еще не работал, попробуйте сделать php artisan config:cache


5

Для дальнейшего обращения к людям, которые приходят сюда. после запуска команды, которая была дана в третьем ответе здесь (сейчас я использую Laravel 5.3 ).

php artisan config:cache

Вы можете столкнуться с этой проблемой:

[ReflectionException]
Class view does not exist

В этом случае вам необходимо добавить его обратно вручную в список поставщиков в файле app.php. ПЕРЕЙТИ: app->config->app.php->'providers[]'и добавить это, вот так:

Illuminate\View\ViewServiceProvider::class,

Надеюсь, что это помогает кому-то.


4

У меня была такая же проблема; мой MAIL_ENCRYPTIONбыл tlsвключен, mail.phpно это было nullв .envфайле.
Поэтому я изменил nullк tlsи это сработало!


Это был случай!
夏 期 劇場

3

Ни одно из вышеперечисленных решений не работает для меня на localhost. Я даже разрешил доступ из менее безопасных приложений, разрешил доступ через капчу разблокировки дисплея и установил для проверки однорангового узла и проверки имени равноправного узла значение false для SSL.

В конце концов, я использовал решение для тестирования SMTP с открытым исходным кодом MailHog. Шаги следующие:

  1. Загрузите последнюю версию MailHog для вашей ОС
  2. Укажите следующие параметры в вашем файле .env

MAIL_DRIVER = SMTP

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = TestUser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = нуль

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. Запустите скачанный файл MailHog
  2. Отправить письмо
  3. Проверьте отправленное письмо, перейдя на localhost: 8025

3

Это просто означает, что ваш сервер не имеет доступа к SMTP-серверу.

Вы можете проверить это, выполнив:

telnet <smtpServer> <smtpPort>

Вы должны получить ошибку «Отказано в доступе».

Решение состоит в том, чтобы просто использовать другой SMTP-сервер, к которому ваш сервер может получить доступ.


2

Вы должны перезагрузить сервер и выполнить следующие команды:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache

Это должно работать.


0

Если ваши результаты с dd(Config::get('mail'));нуля просто используйте команду

php artisan config:clear

0

Мое мнение после внесения изменений в ваши файлы .env, перезапустите сервер и снова откройте приложение. Просто чтобы быть уверенным в реальной ошибке. Php artisan clear и кеш впоследствии работает довольно хорошо.


-1

У меня была такая же проблема, как и у вас, я просто заставил ее работать.

Во-первых, вам необходимо дважды проверить правильность настроек .env. Вот мои настройки:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls

Пожалуйста, убедитесь, что ваш пароль не заключен в кавычки :).

И в config / mail.php он имеет следующее, без комментариев.

<?php

return [

'driver' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', '587'),
'from' => ['address' => 'yourusername', 'name' => 'yourname'],
'encryption' => env('MAIL_ENCRYPTION','tls'),
'username' => env('MAIL_USERNAME', 'username@gmail.com'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

Надеюсь, это работает для вас :)



-2
  1. Вы идете в Mailgun
  2. Нажмите Авторизованные Получатели
  3. Добавьте адрес электронной почты, на который вы хотите отправить письмо.
  4. Проверьте сообщение, отправленное на почту.
  5. Браво! ... Ты в порядке!

2
Пожалуйста, прости мое невежество. Как ответ выше решает проблемы электронной почты Laravel5 в вопросе?
jww
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.