Sto cercando di far funzionare l'e-mail di Laravel 5


154

Sto cercando di inviare un'e-mail a un utente specificato digitando l'URL, ma visualizzo il seguente errore:

Swift_TransportException in AbstractSmtpTransport.php riga 383: codice risposta 250 previsto ma codice "530", con messaggio "530 5.7.1 Autenticazione richiesta

Finora sto solo cercando di farlo funzionare con Gmail. Come posso farlo funzionare?

Questo è quello che ho finora: 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,
    ];

Questo è quello che ho nei percorsi:

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

Questo è quello che ho nel mio controller:

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

E questo è ciò che è nel mio file .env:

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

4
Utilizzare mailtrap.io per i test
roll

Bel consiglio su mailtrap.io @roll
Ben Everard,

Ho avuto esattamente lo stesso errore quando ho usato mailtrap.io
luisfer il

Risposte:


243

So che ora funziona per te @ Vantheman6 ma questo è ciò che ha funzionato per me nel caso sia lo stesso per qualcun altro.

Ho aggiunto al mio file .env i dettagli del servizio di posta che sto usando. Quindi assicurati i seguenti dettagli

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

nel file .env sono accurati.

NOTA: non dimenticare di riavviare il server dopo aver modificato il file .env in modo che selezionerà i nuovi dati inseriti.

Se non riavvii il server, il file .env continuerà comunque a presentare i vecchi dati di posta all'app anche se hai apportato modifiche che possono causare questo errore.


59
Wow, quel "Note" mi ha salvato. Non sapevo che i Vars ENV fossero memorizzati nella cache all'avvio!
Gerben Jacobs,

Potresti aggiornare la risposta ed evidenziare il server di riavvio, anziché il file di configurazione?
mrwaim,

2
@mrwaim, ho pensato che il riavvio del server è esattamente quello che ho specificato nella nota, a meno che non ottenga ciò che stai sottintendendo.
Osei-Bonsu Christian,

1
Suggerirei di rimuovere tutto prima di "Nota:" - ciò che ha aiutato era la nota, e non le cose prima. Vorrei suggerire, se si desidera conservare le altre parti, inserirle dopo la nota. 3 Le persone hanno votato a favore del commento 'Note', quindi probabilmente la Nota ha aiutato anche loro.
mrwaim,

22
Se la configurazione è stata precedentemente memorizzata nella cache, il php artisan config:cacheriavvio del server non rileverà la configurazione aggiornata. Prova a correre di php artisan config:cachenuovo
darronz,

53

La mia configurazione di file .env è così per laravel 5.1

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

qui la cosa più importante è che ho creato una password specifica dell'applicazione Gmail (16 cifre).

Devo rivelare un'altra cosa, poiché nessuna fortuna per nessuna configurazione. Cioè, ogni volta che ho cambiato il file .env è necessario eseguire questo comando

php artisan config:cache

E questo è molto più importante perché senza questo comando laravel esegue le impostazioni precedenti dalla sua cache. Mi ci sono volute più di 10 ore per capire.


1
Ho continuato a usare php artisan cache:clearquando php artisan config:cacheè quello che ha risolto per me. Grazie!
Timgavin,

4
votato a causa della tua nota riguardophp artisan config:cache
darronz,

35

Stai ricevendo un errore di autenticazione perché il nome utente e la password nel tuo file di configurazione sono impostati in modo errato.

Cambia questo:

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

A questa:

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

Il envmetodo controlla il tuo file .env. Nel tuo file .env li chiami MAIL_USERNAME, quindi è quello che devi passare al envmetodo.

Un suggerimento per la risoluzione dei problemi: aggiungi in dd(Config::get('mail'));modo da poter vedere la configurazione effettiva generata . Questo ti aiuterà a individuare problemi come questo e a conoscere esattamente quali informazioni Laravel proverà a utilizzare. Quindi potresti voler fermarlo temporaneamente nel tuo percorso di prova per esaminare ciò che hai:

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

Quindi ho cambiato il mio file mail.php per riflettere i tuoi suggerimenti `` username '=> env (' MAIL_USERNAME '), `e 'password' => env('MAIL_PASSWORD'), che trovo interessanti perché ovunque mi dicono di inserire il tuo indirizzo email e la password per quello. Ricevo ancora un errore 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'));. la directory Config contiene molti file
Vantheman6

Vedi la mia risposta aggiornata, con un esempio di come esaminare la tua configurazione.
jszobody,

è fantastico, sto ancora ricevendo un errore, ma in realtà riesco a vedere cosa sta facendo. Per qualche motivo sta cercando di passare `" host "=>" mailtrap.io "` all'ENV anche se nella posta php sto dicendo'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

Ricontrolla il MAIL_HOSTtuo file
.env

È preciso. MAIL_HOST=smtp.gmail.com Quindi quello che ho finito è stato rimuovere tutto l'ENV da ogni parte del file mail.php. E ora passa l'informazione corretta. OMG Grazie, ha funzionato. Tu sei l'uomo
Vantheman6


13

Finalmente ho capito! Solo per condividere, ci sono più configurazioni che non solo .env

Questo è .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 deve anche inserire indirizzo e nome affinché funzioni.

'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

Se hai mai lo stesso problema e provi tutto online e non funziona, è probabilmente il file di cache di configurazione che invia le informazioni sbagliate. Puoi trovarlo in bootstrap / cache / config.php. Assicurati che le credenziali siano proprio lì. Mi ci è voluta una settimana per capirlo. Spero che questo possa aiutare qualcuno un giorno.


Signore, meritate un bel Bordeaux, grazie mille! Ho notato che nome utente e password erano vuoti in quel file, anche se li ho compilati nei due file appropriati. Da lì, sapevo cosa fare! Merci!
Gregordy,

GRAZIE! Seriamente ho fatto il debug per un'ora con NO CLUE ma QUESTO !!! QUESTO
Ahmad Alfy,

11

A scopo di sviluppo https://mailtrap.io/ fornisce tutte le impostazioni che devono essere aggiunte nel file .env. Per esempio:

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

Altrimenti ai fini dell'implementazione puoi ottenere le credenziali smtp da aggiungere nel file .env dalla posta (come gmail n all)

Dopo l'aggiunta assicurarsi di riavviare il server


Dopo l'aggiunta assicurarsi di riavviare il server .. Questa frase ha risolto il mio problema.
Hos Mercury,

8

Succede anche a me.

È perché quando modifichiamo il .envfile dobbiamo riavviare il server. Basta interrompere la corrente php artisan servee avviarla di nuovo. Questo funzionerà di sicuro.

Se il problema persiste, provare a farlo php artisan config:cache


5

Per riferimento futuro alle persone che vengono qui. dopo aver eseguito il comando che è stato dato nella terza risposta qui ( sto usando ora Laravel 5.3 ).

php artisan config:cache

È possibile che si verifichi questo problema:

[ReflectionException]
Class view does not exist

In tal caso, è necessario aggiungerlo nuovamente all'elenco dei provider nel file app.php. GO-TO: app->config->app.php->'providers[]'e aggiungilo, in questo modo:

Illuminate\View\ViewServiceProvider::class,

Spero che aiuti qualcuno.


4

Ho avuto lo stesso problema; il mio MAIL_ENCRYPTIONera tlsacceso mail.phpma era nullin .envarchivio.
Quindi sono passato nulla tlse ha funzionato!


Questo è stato il caso!
夏 期 劇場,

3

Nessuna delle soluzioni sopra ha funzionato per me su localhost. Ho persino consentito l'accesso da app meno sicure, l'accesso consentito tramite display sbloccare captcha e impostare il peer di verifica e verificare il nome del peer su false per SSL.

Alla fine, ho usato la soluzione di test SMTP open source di MailHog. I passi sono come segue:

  1. Scarica l'ultima versione di MailHog per il tuo sistema operativo
  2. Specificare le seguenti impostazioni nel file .env

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

Mail_port = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. Esegui il file scaricato di MailHog
  2. Invia una email
  3. Controlla l'e-mail inviata andando su localhost: 8025

3

Ciò significa semplicemente che il tuo server non ha accesso al server SMTP.

Puoi testarlo facendo:

telnet <smtpServer> <smtpPort>

Dovresti visualizzare l'errore Accesso negato.

La soluzione è semplicemente usare un altro server SMTP a cui il tuo server può accedere.


2

È necessario riavviare il server ed eseguire questi comandi:

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

Dovrebbe funzionare.


0

Se i risultati dd(Config::get('mail'));sono nulli, utilizzare semplicemente il comando

php artisan config:clear

0

La mia opinione dopo aver apportato modifiche ai file .env riavvia il server e serve nuovamente l'app. Solo per essere sicuri dell'errore reale. L'artista php cancella e la cache funziona in seguito abbastanza bene.


-1

Ho avuto lo stesso problema come te, l'ho appena fatto funzionare.

Innanzitutto, è necessario verificare che le impostazioni .env siano configurate correttamente. Ecco le mie impostazioni:

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

Assicurati che la tua password non sia tra virgolette :).

E in config / mail.php ha il seguente, senza i commenti.

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

];

Spero che funzioni per te :)


-1

Nel mio caso: riavviare il server ed eseguire il php artisan config:clearcomando.


-2
  1. Vai al Mailgun
  2. Fai clic su Destinatari autorizzati
  3. Aggiungi l'indirizzo email a cui desideri inviare la posta.
  4. Verifica il messaggio inviato alla posta.
  5. Bravo! ... Sei a posto.

2
Per favore, perdona la mia ignoranza. In che modo la risposta sopra risolve i problemi di posta elettronica Laravel5 nella domanda?
JWW
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.