Dev Life

E-Mails mit Laravel und Mailgun versenden

Laravel bietet leistungsstarke E-Mail-Funktionen, die sich perfekt mit der zuverlässigen E-Mail-Zustellung von Mailgun ergänzen. Erfahren Sie, wie Sie Laravel für den E-Mail-Versand über Mailgun konfigurieren, Willkommens-E-Mails für neue Nutzer erstellen und erweiterte Funktionen für eine bessere Zustellbarkeit implementieren.
Bild für E-Mails mit Laravel und Mailgun versenden

Ob Sie Passwörter zurücksetzen, Bestellbestätigungen oder Marketing-Newsletter versenden: Eine zuverlässige E-Mail-Zustellung ist für jede Laravel-Anwendung entscheidend. Durch die Kombination des eleganten Mailing-Systems von Laravel mit der leistungsstarken E-Mail-API von Mailgun stellen Sie sicher, dass Ihre wichtigen Nachrichten auch wirklich im Posteingang landen. 

In diesem Leitfaden führen wir Sie durch die Integration von Mailgun in Laravel – von der Ersteinrichtung bis zum Versand Ihrer ersten automatisierten Willkommens-E-Mail. Darüber hinaus lernen Sie erweiterte Funktionen wie E-Mail-Tracking, Anhänge und die richtige Fehlerbehandlung kennen. 

Voraussetzungen

Bevor Sie mit der Integration beginnen, benötigen Sie Folgendes: 

  • Grundkenntnisse in Laravel und PHP 
  • PHP und Composer lokal installiert 
  • Node.js und npm lokal installiert 
  • Einen Code-Editor (wir verwenden Visual Studio Code) 
  • Ein Mailgun-Konto (wir helfen Ihnen bei der Einrichtung) 

Einrichtung Ihres Mailgun-Kontos 

Beginnen wir damit, Ihre Mailgun-Zugangsdaten bereitzustellen. Falls noch nicht geschehen, erstellen Sie auf unserer Anmeldeseite ein kostenloses Konto. Nach der Registrierung müssen Sie Ihr Konto über die von uns gesendete Bestätigungs-E-Mail aktivieren. 

creating a free Mailgun account

Suchen Sie auf Ihrem Mailgun-Dashboard die folgenden drei wichtigen Informationen zusammen:  

1. Ihre Mailgun-Domain: Navigieren Sie zu Senden > Versand > Domains und kopieren Sie Ihren Domainnamen. 

Getting the Mailgun domain

2. Ihr API-Schlüssel: Klicken Sie auf das Dropdown-Menü Ihres Kontos, wählen Sie API-Sicherheit und erstellen Sie einen neuen API-Schlüssel. 

Getting the API key 

Erstellen Sie auf der Seite „API-Schlüssel“ einen neuen API-Schlüssel, indem Sie auf die Schaltfläche „Neuen Schlüssel hinzufügen“ klicken und im Modal „Neuer API-Schlüssel“ eine Beschreibung eingeben. Kopieren Sie unbedingt den Wert Ihres API-Schlüssels, da dieser nur einmal angezeigt wird: 

New key details 

3. Ihre Region: Überprüfen Sie in der oberen Navigationsleiste, ob Sie sich in der Region EU oder US befinden. 

Confirming the region 
Verwenden Sie eine Sandbox-Domain für Tests? Fügen Sie über die Übersichtsseite Ihrer Domain bis zu fünf autorisierte Empfänger hinzu, um sicherzustellen, dass Test-E-Mails zugestellt werden.

4. Sandbox-Domain: Da Sie in diesem Leitfaden Ihre Sandbox-Domain verwenden werden, sollten Sie abschließend unbedingt autorisierte Empfänger konfigurieren. Dies stellt sicher, dass E-Mails, die von Ihrer Sandbox-Domain gesendet werden, nur an die von Ihnen ausdrücklich autorisierten Empfänger zugestellt werden, da Sandbox-Domains auf Tests beschränkt sind und nur an bestimmte Empfänger senden können. 

Navigieren Sie dazu zur Übersichtsseite Ihrer Domain, geben Sie die E-Mail-Adresse ein und klicken Sie auf „Empfänger speichern“:

Adding authorized recipient 

Laravel für Mailgun konfigurieren 

Sobald Sie alle erforderlichen Zugangsdaten aus dem Mailgun-Dashboard haben, konfigurieren Sie Laravel für die Nutzung von Mailgun. Dabei erstellen Sie eine Laravel-Anwendung und aktualisieren die Mailing-bezogenen Umgebungsvariablen mit den zuvor abgerufenen Werten. Anschließend senden Sie eine Willkommens-E-Mail an neue Nutzer.  

Dafür nutzen Sie das Starter-Kit von Laravel Breeze , um die Authentifizierung in Ihrer Anwendung einzurichten, sowie die Mail-Fassade , um die Funktion für den Versand einer E-Mail bei der Registrierung eines neuen Nutzers hinzuzufügen. 

Führen Sie zur Erstellung einer Laravel-Anwendung den folgenden Befehl in Ihrem Terminal aus: 

Erstellung Ihres Laravel-Projekts

Bash

                                

                                    composer create-project laravel/laravel laravel-mailgun-demo rncd laravel-mailgun-demo rncomposer require laravel/breeze --dev rnphp artisan breeze:install 
                                
                            

Geben Sie bei der entsprechenden Aufforderung die folgenden Informationen ein: 

  • Which Breeze stack would you like to install? Blade with Alpine 
  • Would you like dark mode support? No 
  • Which testing framework do you prefer? PHPUnit 

Wenn alles installiert ist, kompilieren Sie die Frontend-Assets Ihrer Anwendung:  

Bash 

                                

                                    npm install
                                
                            

Mail-Konfiguration einrichten
\nDa Sie nun über eine funktionierende Laravel-Anwendung mit eingerichteter Authentifizierung verfügen, aktualisieren Sie die Mailing-bezogenen Umgebungsvariablen. Öffnen Sie Ihre .env-Datei und kommentieren Sie MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, und MAIL_ENCRYPTION aus. 

Ersetzen Sie den Wert von MAIL_MAILER durch mailgun, um die Anwendung auf die Nutzung des Mailgun-Treibers einzustellen, und ersetzen Sie den Wert von MAIL_FROM_ADDRESS durch Ihre E-Mail-Adresse. 

Fügen Sie als Nächstes direkt unter den Mail-bezogenen Umgebungsvariablen die folgenden Mailgun-spezifischen Umgebungsvariablen hinzu und achten Sie darauf, die Platzhalterwerte durch die tatsächlichen Werte aus dem Mailgun-Dashboard zu ersetzen: 

                                

                                    MAILGUN_DOMAIN=<YOUR-MAILGUN-DOMAIN> rnMAILGUN_SECRET=<YOUR-MAILGUN-API-KEY> rnMAILGUN_ENDPOINT=api.mailgun.net 
                                
                            
Wenn Ihre Region im Mailgun-Dashboard EU ist, setzen Sie den Wert von MAILGUN_ENDPOINT auf api.eu.mailgun.net.

Erforderliche Pakete installieren 

Um den Mailgun-Treiber für den E-Mail-Versand nutzen zu können, müssen Sie den Symfony-Mailgun-Mailer-Transport installieren: 

Bash 

                                

                                    composer require symfony/mailgun-mailer symfony/http-client
                                
                            

Konfigurationsdateien aktualisieren
Wenn der Transport installiert ist, öffnen Sie Ihre Konfigurationsdatei config/mail.php und fügen Sie die folgende Konfiguration zum Mailer-Array hinzu, um Mailgun als einen der verfügbaren Mailer einzurichten:

                                

                                    php rnCopy rn'mailgun' => [ rn   'transport' => 'mailgun' rn],
                                
                            

Fügen Sie als Nächstes den folgenden Code zur Datei config/services.php hinzu, um Mailgun zu konfigurieren: 

                                

                                    'mailgun' => [ rn   'domain' => env('MAILGUN_DOMAIN'), rn   'secret' => env('MAILGUN_SECRET'), rn   'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), rn   'scheme' => 'https', rn], 
                                
                            

Konfiguration testen 

Dieser Code stellt sicher, dass Ihre Laravel-Anwendung über die notwendigen Zugangsdaten und Einstellungen verfügt, um für den E-Mail-Versand mit der Mailgun-API zu kommunizieren. 

Damit ist die erforderliche Konfiguration abgeschlossen. Prüfen Sie nun, ob alles richtig eingerichtet ist. Verwenden Sie dazu Tinker

Führen Sie zum Starten der Tinker-Umgebung den folgenden Befehl in Ihrem Terminal aus: 

Bash

                                

                                    php artisan tinker
                                
                            

Führen Sie zum Senden einer Test-E-Mail den folgenden Befehl im Tinker-Terminal aus: 

                                

                                    Mail::raw('This email confirms that everything was set up correctly!', function ($message) { rn   $message->to('your@email.com') rn   ->subject('Testing Laravel + Mailgun'); rn}); 
                                
                            

Ersetzen Sie durch Ihre E-Mail-Adresse und stellen Sie sicher, dass diese als autorisierter Empfänger hinzugefügt wurde. 

 Dieser Befehl verwendet die raw-Methode der Mail-Fassade, um eine E-Mail an die angegebene E-Mail-Adresse zu senden. 

Überprüfen Sie nun Ihren Posteingang, um sicherzustellen, dass Sie eine E-Mail erhalten haben: 

Received email

Willkommens-E-Mails erstellen 

Um den E-Mail-Versand zu vereinfachen, stellt Laravel Mailable-Klassen bereit, mit denen Sie Ihre E-Mail-Inhalte definieren und strukturieren können. Mit Mailable-Klassen lassen sich der Betreff, das Layout und die an die E-Mail-Ansicht übergebenen Daten mühelos anpassen. In diesem Schritt erstellen Sie eine Mailable-Klasse, mit der Sie eine Willkommens-E-Mail an neue Nutzer senden.

Führen Sie zum Erstellen der Mailable-Klasse den folgenden Befehl in Ihrem Terminal aus: 

Bash 

                                

                                    php artisan make:mail WelcomeMessage
                                
                            

Dieser Befehl erstellt eine Mailable-Klasse in der Datei app/Mail/WelcomeMessage.php . In dieser Mailable-Klasse müssen Sie einige Daten akzeptieren, die beim Aufruf der Klasse übergeben werden. Dies ist über die __construct method möglich. Passen Sie diese Methode wie hier gezeigt an: 

                                

                                    public function __construct( rn   protected User $user, rn) {} 
                                
                            

Konfigurieren Sie als Nächstes in der envelope-Methode die Absenderadresse („From“) und den Betreff der E-Mail. In diesem Beispiel konfigurieren Sie lediglich den Betreff der E-Mail, da Sie in der Datei config/mail.php eine globale Absenderadresse („From“) verwenden. Ändern Sie die envelope-Methode wie folgt: 

                                

                                    public function envelope(): Envelope rn{ rn   return new Envelope( rn       subject: 'Welcome to Our Platform', rn   ); rn} 
                                
                            

Definieren Sie dann in der content-Methode die Ansicht für das Rendering der E-Mail-Inhalte und übergeben Sie den Namen des Nutzers über den with-Parameter. Passen Sie die content-Methode folgendermaßen an: 

                                

                                    public function content(): Content rn{ rn   return new Content( rn       view: 'emails.welcome', rn       with: [ rn           'name' => $this->user->name, rn       ], rn   ); rn} 
                                
                            

Vergessen Sie nicht, diese Use-Anweisung in die Datei einzufügen: 

E-Mail-Vorlage erstellen 

Nun müssen Sie die zuvor definierte Ansicht erstellen. Erstellen Sie im Ordner resources/views eine neue Datei namens emails/welcome.blade.php und fügen Sie den folgenden Inhalt ein: 

HTML

                                

                                    <!DOCTYPE html> rn<html> rn    <head>               rn        <title>Welcome to Our Platform</title>               rn        <style> rn            body { rn                font-family: Arial, sans-serif; rn                background-color: #f4f4f4; rn                margin: 0; rn                padding: 20px; rn            } rnrn            .email-container { rn                background-color: #ffffff; rn                padding: 20px; rn                max-width: 600px; rn                margin: auto; rn                border-radius: 8px; rn                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); rn            } rnrn            h1 { rn                color: #333333; rn                font-size: 24px; rn                margin-bottom: 20px; rn            } rnrn            p { rn                color: #555555; rn                font-size: 16px; rn                line-height: 1.5; rn            } rnrn            .footer { rn                margin-top: 20px; rn                font-size: 14px; rn                color: #777777; rn                text-align: center; rn            }                                           rn        </style>           rnrn    </head>       rn    <body>               rn        <div class="email-container">                       rn            <h1>Hello, {{ $name }}!</h1>                       rn            <p> rn                Thank you for signing up on our platform. We're excited to have rn                you on board.             rn            </p>                       rn            <p> rn                Feel free to explore our features, and let us know if you need rn                any assistance.             rn            </p>                       rn            <p>Best regards,<br />{{ config('app.name') }} Team</p>                       rnrn            <div class="footer">                               rn                <p> rn                    © {{ date('Y') }} {{ config('app.name') }}. All rights reserved.         rn                </p>                           rn            </div>                   rn        </div>           rn    </body> rn</html> 
                                
                            

Willkommens-E-Mail implementieren 

Dadurch wird eine einfache Willkommensnachricht mit dem Namen des Nutzers gerendert. 

Als Nächstes müssen Sie den Controller, der die Nutzerregistrierung verarbeitet, so konfigurieren, dass er eine E-Mail an neue Nutzer sendet. In dieser Anwendung befindet sich der Controller für die Nutzerregistrierung in der Datei app/Http/Controllers/Auth/RegisteredUserController.php. Öffnen Sie diese Datei und fügen Sie in der store-Methode diesen Code direkt vor der return-Anweisung ein: 

                                

                                    Mail::to($user->email)->send(new WelcomeMessage($user)); 
                                
                            

Dieser Code verwendet die Mail-Fassade, um über die Mailable-Klasse WelcomeMessage eine E-Mail an den angegebenen Nutzer zu senden. 

Vergessen Sie nicht, diese Use-Anweisungen in dieselbe Datei einzufügen: 

App testen 

Testen Sie nun, ob alles wie erwartet funktioniert. Führen Sie dazu den Laravel-Server mit dem folgenden Befehl aus: 

Bash 

                                

                                    php artisan serve
                                
                            

Navigieren Sie zu http://localhost:8000/register in Ihrem Browser, füllen Sie alle Angaben aus und klicken Sie auf die Schaltfläche „REGISTER“:

Registration page

Sie sollten eine Willkommens-E-Mail in Ihrem Posteingang erhalten: 

Welcome email

Dies bestätigt, dass alles wie erwartet funktioniert. 

Erweiterte Mailgun-Funktionen in Laravel

Bei der Integration von Mailgun in Laravel erhalten Sie Zugriff auf erweiterte Funktionen, die Ihre E-Mail-Möglichkeiten weit über den einfachen Nachrichtenversand hinaus verbessern. Werfen wir einen Blick auf einige dieser Funktionen. 

Anhänge zu E-Mails hinzufügen 

Mit Mailgun können Sie Ihren E-Mails problemlos Anhänge hinzufügen – eine häufige Anforderung beim Versand von Rechnungen, Berichten oder anderen Dokumenten. Über die attachments-Methode in Ihrer Mailable-Klasse können Sie E-Mails einen Anhang hinzufügen: 

                                

                                    public function attachments(): array rn{ rn   return [ rn       Attachment::fromPath('/path/to/file') rn       ->as('fileName.pdf') rn       ->withMime('application/pdf'), rn   ]; rn}
                                
                            

Auch Inline-Anhänge lassen sich in Ihren E-Mail-Vorlagen nutzen: 

HTML 

                                

                                    <body> rn   Sample image: rn   <img src="{{ $message->embed($pathToImage) }}" /> rn</body> 
                                
                            

E-Mail-Tracking mit Mailgun-Webhooks 

Mailgun bietet Ihnen Folgendes E-Mail-Tracking-Funktionen , mit denen Sie wichtige Metriken nachverfolgen können, beispielsweise wann Nutzer Ihre E-Mails öffnen und auf die enthaltenen Links klicken. Dies ist nützlich, um sicherzustellen, dass Ihre E-Mails Ihre Nutzer erreichen und damit interagiert wird. 

Um Tracking zu implementieren, müssen Sie einen Mailgun-Webhook einrichten sowie eine feste Route in Ihrer Laravel-Anwendung erstellen, die Webhook-Aufrufe von Mailgun empfängt. Anhand der vom Webhook empfangenen Daten können Sie anschließend die aus Ihrer Anwendung gesendeten E-Mails nachverfolgen. 

Tags verwenden 

Mailgun unterstützt die Verwendung von Tags , die dabei helfen, E-Mails für Reporting- und Tracking-Zwecke zu gruppieren. Über die envelope-Methode in der Mailable-Klasse können Sie Ihrer E-Mail Tags hinzufügen: 

                                

                                      public function envelope(): Envelope rn   { rn      return new Envelope( rn      subject: 'Welcome to Our Platform', rn      tags: ['welcome'], rn      ); rn   }
                                
                            

Fehlerbehandlung und Debugging 

Bei der Integration von Laravel und Mailgun ist es wichtig, Fehler effektiv zu behandeln und zu debuggen, um die Zuverlässigkeit zu gewährleisten. Zu den häufigsten Fehlern, die während des Integrationsprozesses auftreten können, gehören: 

  • Unauthorized: Wenn die in Ihrer .env-Datei definierten Werte MAILGUN_DOMAIN, MAILGUN_SECRET und MAILGUN_ENDPOINT nicht korrekt sind, kann Mailgun Ihre Anfragen nicht authentifizieren. Überprüfen Sie diese Werte am besten noch einmal, um sicherzugehen, dass sie richtig sind. 
  • Domain not verified: Wenn Sie in der Produktionsumgebung versuchen, E-Mails von einer noch nicht verifizierten Mailgun-Domain zu senden, schlägt die Anfrage fehl. Sie müssen Ihre Domain verifizieren , indem Sie die erforderlichen DNS-Einträge (SPF und DKIM) hinzufügen. 
  • Domain is not allowed to send: Bei der Nutzung von Sandbox-Domains können Sie E-Mails nur senden an zugelassene Empfänger. Stellen Sie sicher, dass Ihre Empfangsadressen beim Testen mit einer Sandbox-Domain auf der Allowlist stehen. 

Wenn beim E-Mail-Versand ein Fehler auftritt, wird dieser normalerweise in der Standard-Protokolldatei von Laravel unter storage/logs/laravel.log erfasst. Wenn Sie spezifische Fehler im Zusammenhang mit Mailgun manuell protokollieren möchten, sollten Sie die Logik für den E-Mail-Versand in einen try…catch-Block einschließen, um Probleme schnell zu identifizieren: 

Zusätzlich bietet Mailgun ein intuitives Dashboard, in dem Sie Probleme bei der E-Mail-Zustellung überwachen und beheben können. Zu den wichtigsten Funktionen des Mailgun-Dashboards gehören:
E-Mail-Protokolle: Mailgun führt detaillierte Protokolle aller E-Mail-Aktivitäten, einschließlich erfolgreicher Zustellungen, Bounces, Öffnungen, Klicks und Fehler. Sie können diese Protokolle filtern und durchsuchen, um fehlgeschlagene Zustellungen oder Fehler zu identifizieren. 

Email logs

Fehlermeldungen: Bei fehlgeschlagenen E-Mails protokolliert Mailgun detaillierte Fehlermeldungen, die Ihnen helfen zu verstehen, warum eine E-Mail nicht zugestellt wurde (etwa wegen ungültiger Empfangsadressen oder DNS-Problemen). 

Detailed error messages

Sie können auf diese Protokolle und Fehlermeldungen auf der Seite „Protokolle“ zugreifen, die Sie über Senden > Versand > Protokolle im Mailgun-Dashboard aufrufen können. 

Fehlerbehebung und Debugging

Was sind häufige Probleme und Lösungen beim E-Mail-Versand mit Mailgun und Laravel? 

1. Authentifizierungsfehler 

  • Überprüfen Sie Ihre Mailgun-Zugangsdaten.
  • Stellen Sie sicher, dass Ihr Endpunkt zu Ihrer Region passt.

2. Domainverifizierung 

  • Stellen Sie sicher, dass die DNS-Einträge richtig konfiguriert sind.
  • Überprüfen Sie die SPF- und DKIM-Einstellungen.

3. Sandbox-Einschränkungen 

  • Bestätigen Sie die Autorisierung der Empfangsadresse.
  • Überprüfen Sie die Versandlimits.

Wie sollten Sie die Zustellung überwachen? 

Greifen Sie über Ihr Mailgun-Dashboard auf detaillierte Protokolle zu: 

  1. Navigieren Sie zu Senden > Versand > Protokolle. 
  2. Überprüfen Sie den Zustellstatus.
  3. Sehen Sie sich die Bounce-Berichte an.
  4. Überwachen Sie die Engagement-Metriken. 

Was sind Best Practices für die Fehlerbehandlung? 

Implementieren Sie eine angemessene Fehlerbehandlung: 

Best Practices So stellen Sie eine optimale Zustellbarkeit sicher: 

1. Trennen Sie Ihre E-Mail-Typen 

  • Verwenden Sie unterschiedliche Domains für Transaktions- und Marketing-E-Mails.
  • Implementieren Sie eine angemessene Warteschlangensteuerung (Queuing) für den Massenversand.

2. Überwachen Sie Ihre Metriken 

  • Verfolgen Sie die Bounce-Raten.
  • Überwachen Sie Spam-Beschwerden.
  • Analysieren Sie die Öffnungsraten.

3. Achten Sie auf die Listenpflege 

  • Bereinigen Sie ungültige Adressen regelmäßig.
  • Entfernen Sie Kontakte mit geringer Interaktion.
  • Gehen Sie angemessen mit Bounces um.

Wie geht es weiter?

Sie beherrschen nun die Grundlagen der Integration von Laravel und Mailgun. Bereit für die nächste Stufe? Entdecken Sie: 

  • Einrichtung von E-Mail-Vorlagen 
  • Implementierung dynamischer Inhalte 
  • Erweiterte Tracking-Funktionen 
  • A/B-Testfunktionen 
Benötigen Sie ausführlichere Informationen? Werfen Sie einen Blick in unsere vollständige API-Dokumentation

Bereit für den zuverlässigen E-Mail-Versand? Registrieren Sie sich für ein Mailgun-Konto und starten Sie mit dem Versand.