Próbuję zmusić email Laravel 5 do działania

154

Próbuję wysłać wiadomość e-mail do określonego użytkownika, wpisując adres URL, ale pojawia się następujący błąd:

Swift_TransportException w linii AbstractSmtpTransport.php 383: Oczekiwano kodu odpowiedzi 250, ale otrzymano kod „530”, z komunikatem „530 5.7.1 Wymagane uwierzytelnienie

Jak dotąd próbuję tylko zmusić go do pracy z Gmailem. Jak to działa?

To, co mam do tej pory: 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,
    ];

Oto co mam w trasach:

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

Oto, co mam w moim kontrolerze:

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

A oto, co jest w moim pliku .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Vantheman6
źródło
4
Użyj mailtrap.io do testowania
rzuć
Niezła wskazówka na mailtrap.io @roll
Ben Everard
Otrzymałem dokładnie ten sam błąd podczas korzystania z mailtrap.io
luisfer

Odpowiedzi:

243

Wiem, że teraz działa dla ciebie @ Vantheman6, ale to właśnie zadziałało dla mnie na wypadek, gdyby było tak samo dla kogoś innego.

Dodałem do mojego pliku .env szczegóły usługi pocztowej, z której korzystam. Więc upewnij się, że poniższe szczegóły

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

w pliku .env są dokładne.

UWAGA: Nie zapomnij zrestartować serwera po edycji pliku .env, aby wybrać nowe dane, które tam umieścisz.

Jeśli nie zrestartujesz serwera, plik .env nadal będzie prezentował stare dane poczty w aplikacji, mimo że zostały wprowadzone zmiany, które mogą powodować ten błąd.

Osei-Bonsu Christian
źródło
59
Wow, ta „Notatka” mnie uratowała. Nie wiedziałem, że zmienne ENV są ​​buforowane podczas uruchamiania!
Gerben Jacobs
Czy mógłbyś zaktualizować odpowiedź - i zaznaczyć restart serwera zamiast pliku konfiguracyjnego?
mrwaim
2
@mrwaim, myślałem, że ponowne uruchomienie serwera jest dokładnie tym, co określiłem w notatce, chyba że nie otrzymuję tego, co sugerujesz.
Osei-Bonsu Christian
1
Sugerowałbym usunięcie wszystkiego przed "Uwaga:" - pomogła notatka, a nie rzeczy wcześniej. Jeśli chcesz zachować pozostałe części, proponuję umieścić je po notatce. 3 Ludzie głosowali za komentarzem „Notatka”, więc prawdopodobnie ta notatka też im pomogła.
mrwaim
22
Jeśli wcześniej zapisałeś konfigurację w pamięci podręcznej, php artisan config:cacheponowne uruchomienie serwera nie spowoduje odebrania zaktualizowanej konfiguracji. Spróbuj php artisan config:cachejeszcze raz
darronz
53

Konfiguracja mojego pliku .env jest taka sama dla laravel 5.1

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

Najważniejsze jest to, że utworzyłem hasło do aplikacji Gmail (16 cyfr).

Muszę ujawnić jeszcze jedną rzecz, ponieważ nie mam szczęścia w żadnej konfiguracji. Oznacza to, że za każdym razem, gdy zmieniłem plik .env, muszę uruchomić to polecenie

php artisan config:cache

I to jest najważniejsze, ponieważ bez tego polecenia laravel wykonuje poprzednie ustawienia z pamięci podręcznej. Potrzeba było ponad 10 godzin, żeby to rozgryźć.

Amir
źródło
1
Ciągle używając php artisan cache:cleargdy php artisan config:cachejest rozwiązany, co to dla mnie. Dziękuję Ci!
timgavin
4
pozytywnie przyjęty z powodu twojej notatki ophp artisan config:cache
darronz
35

Otrzymujesz błąd uwierzytelniania, ponieważ nazwa użytkownika i hasło w pliku konfiguracyjnym są nieprawidłowe.

Zmień to:

'username' => env('[email protected]'),
'password' => env('MyPassword'),

Do tego:

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

envMetoda sprawdza .env pliku. W swoim pliku .env wywołujesz je MAIL_USERNAME, więc to właśnie musisz przekazać do envmetody.

Jedna wskazówka dotycząca rozwiązywania problemów: dodaj dd(Config::get('mail'));, aby zobaczyć faktycznie wygenerowaną konfigurację . Pomoże Ci to wykryć takie problemy i dokładnie wiedzieć, jakie informacje zamierza wykorzystać Laravel. Więc możesz tymczasowo zatrzymać to na swojej trasie testowej, aby sprawdzić, co masz:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
jszobody
źródło
Więc zmieniłem mój plik mail.php, aby odzwierciedlał Twoje sugestie '' nazwa_użytkownika '=> env (' NAZWA_UŻYTKOWNIKA_MAILA '), `i 'password' => env('MAIL_PASSWORD'), co uważam za interesujące, ponieważ wszędzie każe mi wprowadzić swój adres e-mail i hasło. Nadal otrzymuję błąd 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'));. katalog Config zawiera dużo plików
Vantheman6
Zobacz moją zaktualizowaną odpowiedź, z przykładem, jak sprawdzić konfigurację.
jszobody
to niesamowite, wciąż otrzymuję błąd, ale faktycznie widzę, co robi. Z jakiegoś powodu próbuje przekazać `" host "=>" mailtrap.io "` do env, mimo że w mailu php mówię'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6
Sprawdź dokładnie MAIL_HOSTw swoim pliku
.env
To jest dokładne. MAIL_HOST=smtp.gmail.com Skończyło się na usunięciu całego pliku env z każdej części pliku mail.php. A teraz przechodzą prawidłowe informacje. OMG Dziękuję, że zadziałało. Jesteś mężczyzną
Vantheman6
15

problem zostanie rozwiązany poprzez wyczyszczenie pamięci podręcznej

php artisan config:cache
zainudin noori
źródło
13

Wreszcie dotarłem! Po prostu udostępnianie, jest więcej konfiguracji niż tylko .env

To jest .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 musi również wprowadzić adres i nazwę, aby działał.

'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,
yaksowmin
źródło
11

Jeśli kiedykolwiek będziesz miał te same problemy i spróbujesz wszystkiego online, ale to nie zadziała, prawdopodobnie jest to plik pamięci podręcznej konfiguracji, który wysyła nieprawidłowe informacje. Możesz go znaleźć w bootstrap / cache / config.php. Upewnij się, że poświadczenia są tam. Zajęło mi tydzień, zanim to rozgryzłem. Mam nadzieję, że kiedyś komuś to pomoże.

Nabil
źródło
Pan zasłużył na ładne Bordeaux, wielkie dzięki! Zauważyłem, że nazwa użytkownika i hasło były puste w tym pliku, mimo że wypełniłem je w dwóch odpowiednich plikach. Stamtąd wiedziałem, co robić! Merci!
Gregordy
DZIĘKUJĘ CI! Poważnie debugowałem przez godzinę bez WSKAZÓWKI, ale TO !!! TO
Ahmad Alfy,
11

Dla celów programistycznych https://mailtrap.io/ udostępnia wszystkie ustawienia, które należy dodać w pliku .env. Na przykład:

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

W przeciwnym razie dla celów implementacji możesz pobrać poświadczenia smtp do dodania w pliku .env z poczty (np. Gmail n all)

Po dodaniu należy ponownie uruchomić serwer

Bhupesh Shrestha
źródło
Po dodaniu koniecznie zrestartuj serwer .. To zdanie rozwiązało mój problem.
Hos Mercury
8

Mnie też się to zdarza.

To dlatego, że kiedy edytujemy .envplik, musimy zrestartować serwer. Po prostu zatrzymaj prąd php artisan servei uruchom go ponownie. To na pewno zadziała.

Jeśli nadal nie działa, spróbuj php artisan config:cache

Advaith
źródło
5

Dla przyszłych odniesień do osób, które tu przyjeżdżają. po uruchomieniu polecenia, które zostało podane w trzeciej odpowiedzi tutaj ( używam teraz Laravel 5.3 ).

php artisan config:cache

Możesz napotkać ten problem:

[ReflectionException]
Class view does not exist

W takim przypadku musisz dodać go ręcznie z powrotem do listy dostawców w pliku app.php. PRZEJDŹ DO: app->config->app.php->'providers[]'i dodaj go, na przykład:

Illuminate\View\ViewServiceProvider::class,

Mam nadzieję, że to komuś pomoże.

GabMic
źródło
4

Miałem ten sam problem; mój MAIL_ENCRYPTIONbył tlswłączony, mail.phpale był nullw .envaktach.
Więc zmienił nullsię tlsi to zadziałało!

mohaddese abbasi
źródło
Tak było!
夏 期 劇場
3

Żadne z powyższych rozwiązań nie działało dla mnie na hoście lokalnym. Zezwoliłem nawet na dostęp z mniej bezpiecznych aplikacji, zezwoliłem na dostęp przez wyświetlacz odblokuj captcha i ustawiłem weryfikację peera i weryfikację nazwy partnera na false dla SSL.

Ostatecznie użyłem otwartego rozwiązania do testowania SMTP MailHog. Kroki są następujące:

  1. Pobierz najnowszą wersję MailHog dla swojego systemu operacyjnego
  2. Określ następujące ustawienia w pliku .env

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

[email protected]

  1. Uruchom pobrany plik MailHog
  2. Wysłać email
  3. Sprawdź wysłaną wiadomość e-mail, przechodząc do localhost: 8025
ZerosAndOnes
źródło
3

Oznacza to po prostu, że Twój serwer nie ma dostępu do serwera SMTP.

Możesz to sprawdzić, wykonując:

telnet <smtpServer> <smtpPort>

Powinien pojawić się błąd odmowy dostępu.

Rozwiązaniem jest po prostu użycie innego serwera SMTP, do którego ma dostęp Twój serwer.

stidiovip
źródło
2

Powinieneś zrestartować serwer i uruchomić następujące komendy:

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

To powinno działać.

Geniusz w tarapatach
źródło
0

Jeśli wyniki z dd(Config::get('mail'));są zerowe, po prostu użyj polecenia

php artisan config:clear
Mo D Genesis
źródło
0

Moja opinia po wprowadzeniu zmian w plikach .env zrestartuj serwer i ponownie uruchom aplikację. Aby mieć pewność co do rzeczywistego błędu. Rzemieślnik php czyści i buforuje później działa całkiem dobrze.

Alemoh Rapheal Baja
źródło
-1

Miałem ten sam problem, co ty, po prostu go uruchomiłem.

Po pierwsze, musisz dwukrotnie sprawdzić, czy ustawienia .env są poprawnie skonfigurowane. Oto moje ustawienia:

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

Upewnij się, że Twoje hasło nie znajduje się w cudzysłowie :).

A w config / mail.php zawiera następujące elementy, bez komentarzy.

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

];

Mam nadzieję, że to działa dla Ciebie :)

Yazeed AlSaif
źródło
-1

W moim przypadku: Zrestartuj serwer i uruchom php artisan config:clearpolecenie.

Duy Nguyen
źródło
-2
  1. Idź do Mailgun
  2. Kliknij opcję Autoryzowani odbiorcy
  3. Dodaj adres e-mail, na który chcesz wysłać wiadomość.
  4. Sprawdź wiadomość wysłaną na pocztę.
  5. Brawo! ... Jesteś gotowy.
user7141795
źródło
2
Proszę, wybacz moją ignorancję. W jaki sposób powyższa odpowiedź rozwiązuje problemy z pocztą elektroniczną Laravel5 w pytaniu?
jww