Laravel sendet keine E-Mail und gibt keine Fehler aus

Lesezeit: 7 Minuten

Benutzer-Avatar
Daniel Barde

Ich bin jetzt seit vier Monaten an einem Projekt und ich bin wirklich sauer auf das, was ich gerade mit Laravel zu tun habe. Es sendet keine E-Mails; Ich habe es so eingerichtet, dass es den E-Mail-Treiber verwendet, und den richtigen Code eingegeben, aber es scheint überhaupt nicht zu funktionieren. Abgesehen davon, dass es nicht funktioniert, gibt es mir nicht einmal einen Fehler!

Hier meine Konfiguration:

return array(

/*
|--------------------------------------------------------------------------
| Mail Driver
|--------------------------------------------------------------------------
|
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
| sending of e-mail. You may specify which one you're using throughout
| your application here. By default, Laravel is setup for SMTP mail.
|
| Supported: "smtp", "mail", "sendmail"
|
*/

'driver' => 'mail',

/*
|--------------------------------------------------------------------------
| SMTP Host Address
|--------------------------------------------------------------------------
|
| Here you may provide the host address of the SMTP server used by your
| applications. A default option is provided that is compatible with
| the Postmark mail service, which will provide reliable delivery.
|
*/

'host' => 'smtp.mailgun.org',

/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to delivery e-mails to
| users of your application. Like the host we have set this value to
| stay compatible with the Postmark e-mail application by default.
|
*/

'port' => 587,

/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/

'from' => array('address' => null, 'name' => null),

/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/

'encryption' => 'tls',

/*
|--------------------------------------------------------------------------
| SMTP Server Username
|--------------------------------------------------------------------------
|
| If your SMTP server requires a username for authentication, you should
| set it here. This will get used to authenticate with your server on
| connection. You may also set the "password" value below this one.
|
*/

'username' => null,

/*
|--------------------------------------------------------------------------
| SMTP Server Password
|--------------------------------------------------------------------------
|
| Here you may set the password required by your SMTP server to send out
| messages from your application. This will be given to the server on
| connection so that the application will be able to send messages.
|
*/

'password' => null,

/*
|--------------------------------------------------------------------------
| Sendmail System Path
|--------------------------------------------------------------------------
|
| When using the "sendmail" driver to send e-mails, we will need to know
| the path to where Sendmail lives on this server. A default path has
| been provided here, which will work well on most of your systems.
|
*/

'sendmail' => '/usr/sbin/sendmail -bs',

/*
|--------------------------------------------------------------------------
| Mail "Pretend"
|--------------------------------------------------------------------------
|
| When this option is enabled, e-mail will not actually be sent over the
| web and will instead be written to your application's logs files so
| you may inspect the message. This is great for local development.
|
*/

'pretend' => false,

);

Hier ist mein PHP-Code zum Senden von E-Mails:

$data["mail_message"] = "Hello!";

    Mail::send('emails.welcome', $data, function($message)
    {
        $message
            ->to('[email protected]')
            ->from('[email protected]')
            ->subject('TEST');
    });

  • Versuchen Sie, SMTP, Sendmail oder Mail zu verwenden?

    – Boli

    1. Juni 2014 um 14:56 Uhr

  • Ich versuche, Mail zu verwenden

    – Daniel Barde

    1. Juni 2014 um 15:56 Uhr

  • Habe das gleiche Problem. Verwendung des „Mail“-Treibers. Sehr frustrierend.

    – PeterG

    28. Juni 2015 um 2:50 Uhr

  • Mögliche “.env” überschreibt “config/mail.php”, bitte prüfen: Link

    – Alex

    25. Januar 2016 um 17:42 Uhr

  • Dasselbe ist mir passiert, aber ich konnte Try-Catch verwenden, um herauszufinden, was passiert ist.

    – Jordi Espada

    7. August 2018 um 7:14 Uhr


Gehen Sie zuallererst zu app/config/mail.php und ändern Sie den Treiber auf „mail“. Setzen Sie den Host auch als leer.

  • Wenn Sie SMTP nicht gekauft haben, ändern Sie die Einstellungen für E-Mail wie oben beschrieben.

    – Ashwani Panwar

    14. Dezember 2015 um 10:21 Uhr

  • Ich habe verschiedene Einstellungen ausprobiert und es funktioniert nicht. Tatsächlich heißt es in der Dokumentation, dass die Einstellung “Mail” entfernt wurde. Und leider sendet “sendmail” nicht nur E-Mails von Ihrem Server mit dem Befehl sendmail, es scheint, dass SMTP die einzige Möglichkeit ist, mehr zu senden: github.com/swiftmailer/swiftmailer/issues/866

    – NoBugs

    17. November 2019 um 16:17 Uhr

  • Wer diese Methode ausprobiert, vergiss nicht den Cache zu löschen, php artisan config:cache

    – VishalParkash

    12. März 2020 um 9:46 Uhr


In meinem Szenario wurde die E-Mail in die Warteschlange gestellt, weshalb ich keine Ausgabe erhielt. Ich hatte vergessen, dass ich E-Mail eingestellt habe Warteschlange standardmäßig. Ich schaute in die Jobs-Tabelle und sah alle meine Nachrichten, die dort warteten. Ich rannte php artisan queue:work um die Warteschlange zum Laufen zu bringen/sie zu senden.

  • Ich habe die Warteschlange nicht zum Supervisor hinzugefügt, sodass sie nach einem Serverneustart nicht gestartet wurde, danke für den Tipp!

    – Beerr

    2. Februar 2018 um 17:22 Uhr

Benutzer-Avatar
Alex

Sie können die allgemeine E-Mail-Zustellung überprüfen, indem Sie Folgendes eingeben:

php artisan tinker

Mail::getSwiftMailer()->registerPlugin (
    new Swift_Plugins_LoggerPlugin(new Swift_Plugins_Loggers_EchoLogger(false))
);
$to = '[email protected]';
Mail::raw('Testmail', function ($message) use($to) {  
    $message->to($to)->subject('Testmail'); 
});

Und Sie erhalten sogar die Ausgabe des SMTP-Dialogs.

Unbedingt ersetzen $to mit Ihrer E-Mail-Adresse, um zu überprüfen, ob es ankommt.

BEARBEITEN Wenn dies funktioniert und Sie weiterhin Probleme mit der E-Mail-Zustellung haben, liegt möglicherweise ein Warteschlangenproblem vor.

  • Sehr nützlicher Ausschnitt, danke. Leider verwirrte mich das nur noch mehr, da dies perfekt funktionierte, aber die vom Warteschlangenarbeiter aufgerufene E-Mail hängt eine Minute lang

    – Snapey

    3. Februar 2021 um 18:26 Uhr

  • Guter Punkt – es dient nur zum Testen der E-Mail-Zustellung, wenn keine Warteschlange vorhanden ist 🙂

    – Alex

    4. Februar 2021 um 17:56 Uhr

  • Leider, Swift_Plugins_LoggerPlugin und Swift_Plugins_Loggers_EchoLogger gibt es in Laravel 8 nicht.

    – Martin Braun

    1. September 2021 um 8:40 Uhr

Benutzer-Avatar
Gregger

Die Lösung, die für mich funktioniert hat

  1. In deiner .env Datei ändern APP_URL=127.0.01 zu APP_URL=http://localhost
  2. Stellen Sie Ihre SMTP-Details richtig ein und tun Sie es config:cachedann den Server neu starten.

Danach begann meine Mail zu versenden!

Wie ich zu diesem Fix kam

Ich hatte zuvor meine SMTP-Details korrekt eingerichtet, aber selbst nachdem ich config:cache config:clear ausgeführt und meinen Server neu gestartet hatte, wurden die E-Mails nicht gesendet. Danach habe ich es mit meiner funktionierenden Laravel-App verglichen, und der einzige Unterschied war die 127.0.0.1 -> http://localhostalso habe ich das als letzten verzweifelten Versuch geändert, und es hat funktioniert.

Eine Lösung für Benachrichtigungen, die nicht per „Mail“ gesendet werden

https://laravel.com/docs/5.7/notifications#customizing-the-recipient

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * Route notifications for the mail channel.
     *
     * @param  \Illuminate\Notifications\Notification  $notification
     * @return string
     */
    public function routeNotificationForMail($notification)
    {
        return $this->email_address;
    }
}

  • Laravel-Fehler behoben

    – Harry Bosch

    29. April 2021 um 2:32 Uhr

Benutzer-Avatar
Alex

Es könnte daran liegen, dass Sie eine „.env“-Datei im Stammverzeichnis des Laravel-Projekts mit einer Mailserver-Konfiguration wie dieser haben:

...
MAIL_DRIVER=mail
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Es scheint, dass die “.env”-Datei nur die “config/mail.php”-Datei überschreibt. Sie können einfach dieselben Zeilen aus der „.env“-Datei entfernen, um die Konfigurationsoptionen „config/mail.php“ zu verwenden.

  • Laravel-Fehler behoben

    – Harry Bosch

    29. April 2021 um 2:32 Uhr

Gehen Sie zur .env-Datei und legen Sie fest

MAIL_DRIVER=smtp

Oder Sie können den Treiber aus den Konfigurationsdateien festlegen. Gehen Sie zur Datei Laravel 4: app/config/mail.php Laravel 5: config/mail.php und setzen Sie sie

'driver' => 'smtp',

Sie können SMTP verwenden. Hoffe, es wird helfen.

  • Hiya, das könnte das Problem gut lösen … aber es wäre gut, wenn Sie Ihre Antwort bearbeiten und ein wenig mehr erklären könnten, wie und warum es funktioniert 🙂 Vergessen Sie nicht – es gibt jede Menge Neulinge auf Stack Overflow , und sie könnten ein oder zwei Dinge von Ihrem Fachwissen lernen – was für Sie offensichtlich ist, ist es für sie möglicherweise nicht.

    – Taryn Ost

    19. November 2014 um 5:38 Uhr

  • Ok @TarynEast Ich werde sicherstellen, dass ich ab dem nächsten Mal mehr Beschreibung zum besseren Verständnis bereitstellen sollte. Vielen Dank

    – Brn. Rajorija

    5. November 2015 um 11:20 Uhr


  • Sie können dieses Mal noch weitere Informationen angeben – Sie müssen sie nur bearbeiten 🙂

    – Taryn Ost

    5. November 2015 um 23:53 Uhr

  • Danke, dass du dich an mich erinnerst. Ich habe nur die Beschreibung geändert. Bitte prüfen.

    – Brn. Rajorija

    29. August 2016 um 9:44 Uhr

1299480cookie-checkLaravel sendet keine E-Mail und gibt keine Fehler aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy