Спроба налагодити роботу електронною поштою Laravel 5


154

Я намагаюся надіслати електронний лист вказаному користувачеві, ввівши URL-адресу, але я отримую таку помилку:

Swift_TransportException у рядку 383 AbstractSmtpTransport.php: очікуваний код відповіді 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 вар були кешовані під час запуску!
Гербен Джейкобс

Чи можете ви оновити відповідь - і виділити сервер перезавантаження замість файлу конфігурації?
мрвайм

2
@mrwaim, я вважав, що перезапуск сервера - це саме те, що я вказав у примітці, якщо я не отримую те, що ви маєте на увазі.
Осей-Бонсу Крістіан

1
Я б запропонував видалити все до "Примітки:" - це допомогло замітку, а не речі раніше. Я б запропонував, якщо ви хочете зберегти інші частини, покладіть їх після записки. 3 Люди підтримали коментар "Примітки", тому, Примітка, ймовірно, їм теж допомогла.
mrwaim

22
Якщо ви раніше кешували свою конфігурацію, після php artisan config:cacheцього перезапуск сервера не підбере оновлену конфігурацію. Спробуйте запустити php artisan config:cacheще раз
darronz

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саме це вирішило для мене. Дякую!
timgavin

4
вилучено через вашу замітку проphp artisan config:cache
darronz

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, щоб відобразити ваші пропозиції `` ім'я користувача '=> 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

це дивовижно, я все ще отримую помилку, але я насправді бачу, що це робить. Чомусь він намагається передати `" хост "=>" mailtrap.io "` до env, хоча в пошті php я говорю'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6,

Двічі перевірте MAIL_HOSTсвій .env файл
jszobody

Це точно. MAIL_HOST=smtp.gmail.com Тож я закінчив робити це видалення всіх оточень з кожної частини файлу mail.php. І ось тепер правильна інформація проходить. OMG Дякую, що це спрацювало. Ви людина
Вантеман6


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. GO-TO: app->config->app.php->'providers[]'і додайте його так:

Illuminate\View\ViewServiceProvider::class,

Сподіваюся, що хтось допомагає.


4

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


Так було!
夏 期 劇場

3

Жодне з перерахованих вище рішень не працювало для мене на localhost. Я навіть дозволив доступ із менш захищених додатків, дозволив доступ через Captcha для розблокування дисплея та встановив рівність перевірки та перевірити ім'я однорангового на false для SSL.

Врешті-решт я застосував відкрите джерело SMTP-тестування рішення MailHog. Кроки такі:

  1. Завантажте останню версію MailHog для вашої ОС
  2. У файлі .env укажіть наступні налаштування

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = тестовий користувач

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

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-ремісник очистить і кеш згодом працює досить добре.


-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,

];

Сподіваюся, це працює для вас :)


-1

У моєму випадку: Перезавантажте сервер і запускайте php artisan config:clearкоманду.


-2
  1. Ви йдете до Пошти
  2. Клацніть Авторизовані отримувачі
  3. Додайте електронну адресу, на яку ви хочете надіслати пошту.
  4. Перевірте повідомлення, надіслане на пошту.
  5. Браво! ... Тобі добре піти.

2
Пробачте, будь ласка, про моє незнання. Як відповідь вище вирішує проблеми з електронною поштою Laravel5 у запитанні?
jww
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.