Я пытаюсь отправить электронное письмо указанному пользователю, введя 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
Я знаю, что это работает для вас сейчас @ Vantheman6, но это то, что сработало для меня, если это одно и то же для кого-то другого.
Я добавил в свой .env файл сведения о почтовой службе, которую я использую. Поэтому убедитесь, что следующие данные
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=MyUsername@gmail.com MAIL_PASSWORD=MyPassword
в файле .env являются точными.
ПРИМЕЧАНИЕ. Не забудьте перезапустить сервер после редактирования .env-файла, чтобы он отобрал новые данные, которые вы там разместили.
Если вы не перезагрузите сервер, файл .env по-прежнему будет продолжать отправлять старые данные в приложение, даже если вы внесли изменения, которые могут вызвать эту ошибку.
Конфигурация моего .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 часов, чтобы выяснить.
Вы получаете ошибку проверки подлинности, потому что имя пользователя и пароль в вашем файле конфигурации настроены неправильно.
Измените это:
'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')); });
Если у вас есть такая же проблема и попробуйте все в Интернете, и это не сработает, возможно, файл конфигурации кэша отправляет неверную информацию. Вы можете найти его в bootstrap / cache / config.php. Убедитесь, что учетные данные указаны правильно. Мне потребовалась неделя, чтобы понять это. Надеюсь, это когда-нибудь поможет кому-нибудь.
Наконец я получил! Просто чтобы поделиться, есть больше конфигурации, чем просто .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,
В целях развития 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)
После добавления обязательно перезапустите сервер.
Это случается и со мной.
Это связано с тем, что при редактировании файла
.env
нам необходимо перезапустить сервер. Просто прекратите использование текущегоphp artisan serve
и запустите его еще раз. Это будет работать точно.
Если все еще не работает, попробуйте выполнить php artisan config:cache
В будущем обратитесь к людям, которые приезжают сюда. после того, как вы запустите команду, указанную в третьем ответе здесь ( теперь я использую Laravel 5.3 ).
php artisan config:cache
Вы можете столкнуться с этой проблемой:
[ReflectionException] Class view does not exist
В этом случае вам нужно добавить его обратно вручную в список поставщиков в файле app.php. GO-TO: app->config->app.php->'providers[]'
и добавьте его, например:
Illuminate\View\ViewServiceProvider::class,
Надежда Это помогает кому-то.
у меня была та же проблема; мой «MAIL_ENCRYPTION» был «tls» на mail.php, но он был «null» на .env-файле, поэтому я изменил «null» на «tls», и он сработал!
Это просто означает, что ваш сервер не имеет доступа к SMTP Sever.
Вы можете проверить это, выполнив
telnet <smtpServer> <smtpPort>
Вы должны получить ошибку Access denied.
Решение заключается только в том, чтобы использовать другой SMTP-сервер, доступ к которому может получить ваш сервер.
У меня была такая же проблема, как и вы, я просто получил ее на работу.
Во-первых, вам нужно дважды проверить правильность настроек .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, ];
Надеюсь, это сработает для вас 🙂
Ни один из вышеперечисленных решений не работал для меня на локальном хосте. Я даже разрешал доступ из менее безопасных приложений, разрешал доступ через разблокировку разблокировки экрана и устанавливал проверку сверстника и проверял одноранговое имя на false для SSL.
В конце концов, я использовал SMTP-решение с открытым исходным кодом MailHog. Эти шаги заключаются в следующем:
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
проблема будет решена путем очистки кеша
php artisan config:cache