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.