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

136

Я пытаюсь отправить электронное письмо указанному пользователю, введя 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' =>"[email protected]" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('[email protected]'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

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

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('[email protected]', '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
[email protected]
MAIL_PASSWORD=MyPassword
  • 3
    Используйте mailtrap.io для тестирования
  • 0
    Хороший совет на mailtrap.io @roll
Показать ещё 1 комментарий
Теги:
laravel-5
email-integration

19 ответов

218
Лучший ответ

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

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

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=MyPassword

в файле .env являются точными.

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

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

  • 55
    Вау, эта «записка» спасла меня. Я не знал, что переменные ENV кэшировались при запуске!
  • 0
    Не могли бы вы обновить ответ - и выделить файл перезапуска вместо файла конфигурации?
Показать ещё 10 комментариев
46

Конфигурация моего .env файла похожа на laravel 5.1

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
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
30

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

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

'username' => env('[email protected]'),
'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'));
});
  • 0
    Поэтому я изменил свой файл mail.php, чтобы отразить ваши предложения `'username' => env ('MAIL_USERNAME'),` and '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 содержит много файлов
  • 0
    Смотрите мой обновленный ответ, с примером того, как проверить ваш конфиг.
Показать ещё 4 комментария
12

проблема будет решена путем очистки кеша

php artisan config:cache
9

В целях развития 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)

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

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

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

Это .env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

[email protected]

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' => '[email protected]' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
8

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

  • 0
    Вы, сэр, заслужили хороший Бордо, большое спасибо! Я заметил, что имя пользователя и пароль были пустыми в этом файле, даже если я заполнил их в двух соответствующих файлах. Оттуда я знал, что делать! Мерси!
  • 0
    БЛАГОДАРЮ ВАС! Серьезно я отлаживал в течение часа без КЛЕЯ, кроме ЭТОГО !!! ЭТОТ
7

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

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

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

4

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

php artisan config:cache

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

[ReflectionException]
Class view does not exist

В этом случае вам нужно добавить его обратно вручную в список вашего провайдера в файле app.php. ИДТИ К: app->config->app.php->'providers[]' и добавьте его так:

Illuminate\View\ViewServiceProvider::class,

Надежда Это помогает кому-то.

2

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

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

telnet <smtpServer> <smtpPort>

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

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

2

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

  • 0
    Это был случай!
1

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

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

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

1

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

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

MAIL_DRIVER = SMTP

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

[email protected]

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

**************** MAIL_HOST = smtp.gmail.com ****************

0

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

php artisan config:clear
-1

В моем случае: перезагрузите сервер и выполните команду php artisan config:clear.

-1

У меня та же проблема. Я исправил эти ошибки, перезапустив мой веб-сервер.

-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', '[email protected]'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

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

-3
  • Вы переходите к Mailgun
  • Нажмите "Авторизованные получатели"
  • Добавьте адрес электронной почты, который вы хотите отправить.
  • Проверьте сообщение, отправленное по почте.
  • Браво!... Тебе хорошо идти.
  • 1
    Пожалуйста, прости мое невежество. Как ответ выше решает проблемы электронной почты Laravel5 в вопросе?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню