Der Versuch, Laravel 5-E-Mail zum Laufen zu bringen

154

Ich versuche, eine E-Mail an einen bestimmten Benutzer zu senden, indem ich die URL eingebe, erhalte jedoch die folgende Fehlermeldung:

Swift_TransportException in AbstractSmtpTransport.php Zeile 383: Erwarteter Antwortcode 250, aber Code "530" mit der Meldung "530 5.7.1 Authentifizierung erforderlich

Bisher versuche ich nur, es mit Google Mail zum Laufen zu bringen. Wie kann ich das zum Laufen bringen?

Das habe ich bisher: 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,
    ];

Das habe ich auf den Routen:

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

Folgendes habe ich in meinem Controller:

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

Und das steht in meiner .env-Datei:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Vantheman6
quelle
4
Verwenden Sie mailtrap.io zum Testen
rollen Sie den
Netter Tipp auf mailtrap.io @roll
Ben Everard
Ich habe genau den gleichen Fehler bei der Verwendung von mailtrap.io
luisfer

Antworten:

243

Ich weiß, dass es jetzt für dich funktioniert @ Vantheman6, aber das hat für mich funktioniert, falls es für jemand anderen dasselbe ist.

Ich habe meiner .env-Datei die Details des von mir verwendeten Mail-Dienstes hinzugefügt. Stellen Sie daher die folgenden Details sicher

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

in der .env-Datei sind korrekt.

HINWEIS: Vergessen Sie nicht, Ihren Server nach dem Bearbeiten der .env-Datei neu zu starten, damit die neuen Daten ausgewählt werden, die Sie dort eingegeben haben.

Wenn Sie Ihren Server nicht neu starten, zeigt die .env-Datei der App weiterhin die alten E-Mail-Daten an, obwohl Sie Änderungen vorgenommen haben, die diesen Fehler verursachen können.

Osei-Bonsu Christian
quelle
59
Wow, diese 'Notiz' hat mich gerettet. Ich wusste nicht, dass ENV-Vars beim Start zwischengespeichert wurden!
Gerben Jacobs
Könnten Sie die Antwort aktualisieren - und den Neustartserver anstelle der Konfigurationsdatei markieren?
Mrwaim
2
@mrwaim, ich dachte, der Neustart des Servers ist genau das, was ich in der Notiz angegeben habe, es sei denn, ich verstehe nicht, was Sie implizieren.
Osei-Bonsu Christian
1
Ich würde vorschlagen, alles vor "Notiz:" zu entfernen - was half, war die Notiz und nicht die Dinge vorher. Ich würde vorschlagen, wenn Sie die anderen Teile behalten möchten, setzen Sie sie nach der Notiz. 3 Die Leute haben den Kommentar "Notiz" positiv bewertet, sodass die Notiz ihnen wahrscheinlich auch geholfen hat.
Mrwaim
22
Wenn Sie Ihre Konfiguration zuvor zwischengespeichert haben, wird beim php artisan config:cacheNeustart des Servers die aktualisierte Konfiguration nicht übernommen. Versuchen Sie es php artisan config:cacheerneut
Darronz
53

Meine .env-Dateikonfiguration ist für Laravel 5.1 wie folgt

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

Hier ist das Wichtigste, dass ich ein anwendungsspezifisches Passwort für Google Mail erstellt habe (16-stellig).

Ich muss noch etwas verraten, da ich für keine Konfiguration Glück habe. Das heißt, wenn ich die .env-Datei geändert habe, muss dieser Befehl ausgeführt werden

php artisan config:cache

Und dies ist am wichtigsten, da laravel ohne diesen Befehl vorherige Einstellungen aus dem Cache ausführt. Ich habe mehr als 10 Stunden gebraucht, um das herauszufinden.

Amir
quelle
1
Ich habe immer wieder verwendet, php artisan cache:clearwann php artisan config:cachees das Problem für mich gelöst hat. Danke dir!
Timgavin
4
upvoted wegen Ihrer Notiz überphp artisan config:cache
darronz
35

Sie erhalten einen Authentifizierungsfehler, weil der Benutzername und das Kennwort in Ihrer Konfigurationsdatei falsch eingerichtet sind.

Ändere das:

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

Dazu:

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

Die envMethode überprüft Ihre .env-Datei. In Ihrer .env-Datei rufen Sie diese auf MAIL_USERNAME, und das müssen Sie an die envMethode übergeben.

Ein Tipp zur Fehlerbehebung: Fügen dd(Config::get('mail'));Sie hinzu, damit Sie die tatsächlich generierte Konfiguration sehen können . Auf diese Weise können Sie Probleme wie dieses erkennen und genau wissen, welche Informationen Laravel verwenden wird. Vielleicht möchten Sie dies auf Ihrer Testroute vorübergehend stoppen, um zu überprüfen, was Sie haben:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
jszobody
quelle
Also habe ich meine mail.php-Datei geändert, um Ihre Vorschläge "Benutzername" => env ("MAIL_USERNAME") wiederzugeben, und 'password' => env('MAIL_PASSWORD'), was ich interessant finde, weil ich überall aufgefordert werde, Ihre E-Mail-Adresse und Ihr Passwort dafür einzugeben. Ich erhalte immer noch einen Fehler 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'));. Das Konfigurationsverzeichnis enthält viele Dateien
Vantheman6
In meiner aktualisierten Antwort finden Sie ein Beispiel für die Überprüfung Ihrer Konfiguration.
Jszobody
Das ist großartig, ich bekomme immer noch einen Fehler, aber ich kann tatsächlich sehen, was es tut. Aus irgendeinem Grund wird versucht, "host" => "mailtrap.io" an die Umgebung zu übergeben, obwohl ich in mail php sage'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6
Überprüfen Sie die MAIL_HOSTin Ihrer .env-Datei
jszobody
Es ist genau. MAIL_HOST=smtp.gmail.com Am Ende entfernte ich also die gesamte Umgebung aus jedem Teil der mail.php-Datei. Und jetzt gehen die richtigen Informationen durch. OMG Danke, es hat funktioniert. Du bist der Mann
Vantheman6
15

Das Problem wird durch Löschen des Cache gelöst

php artisan config:cache
Zainudin Noori
quelle
13

Endlich habe ich! Nur zum Teilen gibt es mehr Konfiguration als nur .env

Dies ist .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 muss auch Adresse und Name eingeben, damit es funktioniert.

'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
quelle
11

Wenn Sie jemals die gleichen Probleme haben und alles online ausprobieren und es nicht funktioniert, ist es wahrscheinlich die Konfigurations-Cache-Datei, die die falschen Informationen sendet. Sie finden es in bootstrap / cache / config.php. Stellen Sie sicher, dass die Anmeldeinformationen genau dort sind. Ich habe eine Woche gebraucht, um das herauszufinden. Ich hoffe, das wird eines Tages jemandem helfen.

Nabil
quelle
Sie, Sir, haben einen schönen Bordeaux verdient, vielen Dank! Ich bemerkte, dass Benutzername und Passwort in dieser Datei leer waren, obwohl ich sie in die beiden entsprechenden Dateien füllte. Von dort wusste ich, was zu tun war! Merci!
Gregordy
DANKE! Im Ernst, ich habe eine Stunde lang ohne Ahnung debuggt, aber DIESES !!! THIS
Ahmad Alfy
11

Zu Entwicklungszwecken bietet Ihnen https://mailtrap.io/ alle Einstellungen, die in der ENV-Datei hinzugefügt werden müssen. Z.B:

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

Andernfalls können Sie zu Implementierungszwecken die SMTP-Anmeldeinformationen, die in der ENV-Datei hinzugefügt werden sollen, aus der E-Mail abrufen (wie Google Mail n all).

Stellen Sie nach dem Hinzufügen sicher, dass der Server neu gestartet wird

Bhupesh Shrestha
quelle
Stellen Sie nach dem Hinzufügen sicher, dass der Server neu gestartet wird. Dieser Satz hat mein Problem gelöst.
Hos Mercury
8

Das passiert mir auch.

Dies liegt daran, dass wir beim Bearbeiten der .envDatei den Server neu starten müssen. Stoppen Sie einfach den Strom php artisan serveund starten Sie ihn erneut. Dies wird sicher funktionieren.

Wenn es immer noch nicht funktioniert hat, versuchen Sie es php artisan config:cache

Advaith
quelle
5

Für zukünftige Hinweise auf Menschen, die hierher kommen. Nachdem Sie den Befehl ausgeführt haben, der in der dritten Antwort hier gegeben wurde ( ich verwende jetzt Laravel 5.3 ).

php artisan config:cache

Möglicherweise tritt dieses Problem auf:

[ReflectionException]
Class view does not exist

In diesem Fall müssen Sie es manuell wieder zu Ihrer Anbieterliste unter der Datei app.php hinzufügen. GO-TO: app->config->app.php->'providers[]'und füge es wie folgt hinzu:

Illuminate\View\ViewServiceProvider::class,

Hoffe das hilft jemandem.

GabMic
quelle
4

Ich habe das gleiche Problem gehabt; Mein MAIL_ENCRYPTIONwar tlsan, mail.phpaber es war nullin der .envAkte.
Also änderte ich nullzu tlsund es funktionierte!

mohaddese abbasi
quelle
Das war der Fall!
期 劇場
3

Keine der oben genannten Lösungen hat bei localhost für mich funktioniert. Ich habe sogar den Zugriff von weniger sicheren Apps aus zugelassen, den Zugriff über Captch Unch Captcha zugelassen und den Verify-Peer und den Verify-Peer-Namen für SSL auf false gesetzt.

Schließlich habe ich die Open-Source-SMTP-Testlösung von MailHog verwendet. Die Schritte sind wie folgt:

  1. Laden Sie die neueste Version von MailHog für Ihr Betriebssystem herunter
  2. Geben Sie die folgenden Einstellungen in Ihrer .env-Datei an

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = Testbenutzer

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = null

[email protected]

  1. Führen Sie die heruntergeladene Datei von MailHog aus
  2. E-Mail senden
  3. Überprüfen Sie die gesendeten E-Mails, indem Sie zu localhost gehen: 8025
ZerosAndOnes
quelle
3

Das bedeutet einfach, dass Ihr Server keinen Zugriff auf den SMTP-Server hat.

Sie können dies testen, indem Sie Folgendes tun:

telnet <smtpServer> <smtpPort>

Sie sollten den Fehler Zugriff verweigert erhalten.

Die Lösung besteht darin, nur einen anderen SMTP-Server zu verwenden, auf den Ihr Server zugreifen kann.

stidiovip
quelle
2

Sie sollten den Server neu starten und die folgenden Befehle ausführen:

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

Das sollte funktionieren.

Genie in Schwierigkeiten
quelle
0

Wenn Ihre Ergebnisse von dd(Config::get('mail'));null sind, verwenden Sie einfach den Befehl

php artisan config:clear
Mo D Genesis
quelle
0

Meine Meinung, nachdem Sie Änderungen an Ihren .env-Dateien vorgenommen haben, starten Sie Ihren Server neu und stellen Sie die App erneut bereit. Nur um sicher zu gehen, dass der eigentliche Fehler vorliegt. Der PHP Artisan Clear und Cache danach funktioniert ziemlich gut.

Alemoh Rapheal Baja
quelle
-1

Ich hatte das gleiche Problem wie Sie, ich habe es gerade zum Laufen gebracht.

Zunächst müssen Sie überprüfen, ob die .env-Einstellungen korrekt eingerichtet sind. Hier sind meine Einstellungen:

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

Bitte stellen Sie sicher, dass Ihr Passwort nicht zwischen Anführungszeichen steht :).

Und in config / mail.php hat es Folgendes ohne die Kommentare.

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

];

Hoffe es funktioniert bei dir :)

Yazeed AlSaif
quelle
-1

In meinem Fall: Starten Sie den Server neu und führen Sie den php artisan config:clearBefehl aus.

Duy Nguyen
quelle
-2
  1. Du gehst zur Mailgun
  2. Klicken Sie auf Autorisierte Empfänger
  3. Fügen Sie die E-Mail-Adresse hinzu, an die Sie E-Mails senden möchten.
  4. Überprüfen Sie die an die E-Mail gesendete Nachricht.
  5. Bravo! ... Du kannst loslegen.
user7141795
quelle
2
Bitte vergib mir meine Unwissenheit. Wie löst die obige Antwort die Laravel5-E-Mail-Probleme in der Frage?
JWW