Laravel Mailables – Tutorial

Schnell und einfach E-Mails mit Laravel Mailables versenden

Die neue Möglichkeit mit Laravel E-Mails zu versenden

Nun ist es ist es endlich soweit. Laravel 5.3 ist seit Ende August veröffentlicht. Und damit einige neue und großartige Features. Eines der größten Änderungen ist eine neue Art und Weise, wie in Laravel E-Mails versendet werden können.

Hier übrigens eine Zusammenfassung von den größten Änderungen, die Taylor Otwell während der Laracon US schon präsentiert hat. In diesem Beitrag möchte ich mich aber auf Laravel 5.3 Mailables konzentrieren und zeige euch wie man damit den bisherigen Code verbessern kann.

Wie wir bisher E-Mails verschickt haben
Mail::send('layout.email.send', ['title' => $title, 'message' => $message], function ($message)
{
    $message->from('[email protected]', 'Tobias Maxham');
    $message->to('[email protected]');
});

Diese Methode hat zwar bisher gut funktioniert, doch nachdem einige E-Mails gesendet wurden, fängt die Code-Basis irgendwann an chaotisch zu werden. Das soll sich aber nun mit Laravel Mailables deutlich verbessern.

Einführung in Laravel Mailables

Mit Mailables in Laravel werden vorgefertigte Klassen erstellt, die später verschickt werden können. Grundsätzlich sind Mailables verantwortlich für die Datenzusammenstellung und diese dann an die Views weiterzugeben. Und mittlerweile ist die API für das Senden von E-Mails wirklich sehr einfach geworden.

Alles was wir nun machen müssen, um E-Mails in Laravel zu versenden ist folgendes:

Mail::to('[email protected]')->send(new DoryFound);

Wie man sehen kann, ist es deutlich einfacher geworden E-Mails zu verschicken. Trotzdem kann man mit der „alten“ API immer noch E-Mails verschicken. Das wird noch weiterhin unterstützt.

Erstellen einer Mailable-Klasse

Mit artisan, dem genialen Laravel Command-Line-Tool, können wir ganz einfach eine neue mailable-Klasse erstellen:

php artisan make:mail <NameDerMailableKlasse>

In meinem Beispiel habe ich die mailable Klasse DoryFound genannt („Findet Dorie“ kommt ende September im Kino).  Demnach müsste der Befehl wie folgt aussehen:

php artisan make:mail DoryFound

Nachdem wir nun die neue mailable Klasse erstellt haben (zu finden in app/mail) hat diese folgenden Aufbau:

<?php
 
namespace App\Mail;
 
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
 
class DoryFound extends Mailable
{
    use Queueable, SerializesModels;
 
    public function __construct()
    {
        //
    }
 
    public function build()
    {
        return $this->view('view.name');
    }
}

Wie man sehen kann, dient die build Methode zum Generieren der Nachricht. In unserem Fall ersetzte ich den Pfad mit email.dory-found. Als nächstes legen wir ein neues Template an. Dazu müssen wir unter ressources/views zunächst einen Ordner email anlegen, sollte dieser noch nicht vorhanden sein, und dort dann eine neue PHP-Datei unter dem Namen dory-found.blade.php.

Daten an die E-Mail View weitergeben

Alle public-Properties der mailable Kasse werden automatisch in der View zur Verfügung gestellt. Daten der View zu übergeben ist also genau so einfach wie die Daten in der mailable Klasse öffentlich zu machen. Sagen wir also, ich möchte den Ort übergeben, an dem ich Dorie gefunden habe, dann muss ich das nur in der Klasse so festhalten:

public $location = 'Ozean';

In der View können wir auf den Wert dann zugreifen, als wäre es eine normale Variable:

<h1>Ich habe es geschafft!</h1>
<p>Ich habe Dory im <strong>{{ $total }}</strong> gefunden.</p>

Zusätzlich könnte man die with-Methode verwenden:

public function build()
{
    return $this->view('emails.dory-found')
                ->with($key, $value);
}

Senden zusätzlicher Parameter

Hinzufügen von BCC, CC und dem ganzen Rest kann auf die $this in der build-Methode aufgerufen werden. Hier ein Beispiel dafür:

public function build()
{
 
    $address = '[email protected]';
    $name = 'TobyMaxham';
    $subject = 'Dorie Gefunden!';
 
    return $this->view('emails.dory-found')
                ->from($address, $name)
                ->cc($address, $name)
                ->bcc($address, $name)
                ->replyTo($address, $name)
                ->subject($subject)
                ->with($key, $value);
}

Fazit

Mit Laravel Mailable lassen sich wirklich schnell und einfach E-Mails versenden. Das Erstellen der Klassen ist genau so leicht wie das Versenden der E-Mails. Wer jedoch lieber die alte Funktionalität nutzen möchte, könnte dies weiterhin nutzen. Ich bin aber schon jetzt ein großer Fan von Laravel 5.3 und werde auch noch weitere Neuerungen wie Notifications oder oAuth beschreiben.

URL-Shortener mit neuer Funktion

Heute gibt es Neuigkeiten zum URL-Shortener der UX9 Group. Seit einiger Zeit ist es möglich, den URL Shorterne über verschiedene URLs aufzurufen. Bislang jedoch gab es keinen Unterschied zwischen den einzelnen Domains. Doch nun habe ich ein Feature freigeschalten, mit dem nun noch mehr kurze URL’s generiert werden können.

Bei der Generierung der kurzen URL’s, wird nun die Domain beachtet. Dies hat den Vorteil, dass ein viel höherer Pool an möglichen URL’s entsteht. Auf http://ux6.de/ ist die Chance auf eine vier-stellige URL noch sehr hoch. Dies kann sich in den nächsten Wochen zwar ändern, doch ich werde immer wieder neue Domains aktivieren und bekannt geben.

Aktuelle URL’s

Seit dem Start von meinem URL-Shortener sind noch vier weitere Domains dazu gekommen. In Kürze werden auch noch weitere folgen. Mit der Premium-Version habt ihr auch jetzt schon Zugriff darauf.

Aktuell könnt ihr auf den folgenden Seiten URL’s generieren:

Sobald diese offiziell verfügbar sind, werde ich dazu nochmal einen Newsletter verfassen.

URL-Shortener
QR-Code

Laracon: Übersicht Laravel 5.3

Gestern hat Taylor Otwell auf der LaraconUS einige neue Features von Laravel 5.3 präsentiert. Die Präsentation beinhaltete die vier Hauptpunkte: Laravel Scout, Laravel Passport, Laravel Mailable und Laravel Notifications. Hier nun ein grober Überblick, was man damit alles machen kann.

Laravel Scout

Laravel Scout ist eine Treiber basierende Volltextsuche für Eloquent. Algolia wird bereits bei der Auslieferung unterstützt. Da es jedoch Treiber basierend ist, können und werden noch andere Volltextsuch-Systeme integriert. Da wird es in der nächsten Zeit in der Community viele Vorschläge geben.

Scout kann leicht über einen „Searchable“-Trait in die bestehenden Models eingebaut werden. Anschließend müssen die Daten nur noch über einen Service synchronisiert werden. Dies könnte z.B. so aussehen:

php artisan scout:import App\\Post

Dann kann danach gesucht werden:

Post::search('Alice')->get();

Auch das Paginieren ist möglich:

Post::search('Alice')->paginate();

Genauso wie einfache WHERE-Bedingungen:

Post::search(‘Alice’)—>where('acount_id', '>', 1)->paginate();

Laravel Mailable

Laravel Mailable ist eine neue Mail-Klasse, die das Verenden von E-Mails deutlich verbessert. Das ganze schaut nun viel mehr nach Laravel aus, als die bisherige Vorgehensweise mit der Closure-Funktion.

Mail::to('[email protected]')->send(new OrderComplete);

Es sind alle Mail-Features weiterhin verfügbar:

Mail::to('[email protected]')->cc('[email protected]')->queue(new OrderComplete);

Laravel Notifications

Laravel Notifications erlaubt es uns, Updates über Services wie Slack, SMS oder E-Mail zu machen.

Notifications werden bereits mit einem „responsive transactional“ E-Mail Template ausgeliefert. In der eigentlichen Klasse muss dann nur noch folgendes aufgerufen werden:

 

$this->line('Thank you for joining')
    ->action('Button Text', 'http://url.com')
    ->line('If you have any questions please hit reply')
    ->success();

 

$this->line('Sorry we had a problem with your order')
    ->action('Button Text', 'http://url.com')
    ->error();

Laravel Passport

Laravel Passport ist ein optionales Packages das einen vollständigen OAuth2 Server bereitstellen kann. Man kann damit z.B. Token generieren oder zurücknehmen.

 

Diese Features werden alle noch bis zum Release Dokumentiert. Allerdings wird es bis dahin doch noch ein paar Wochen dauern. Vielleicht ja zur LaraconEU?

Installation eines MEAN.JS Stack

In diesem Beitrag werde ich darauf eingehen, was MEAN.JS eigentlich ist, wie man einen MEAN.JS Stack auf seinem Server aufsetzten kann und was man hierbei für Vorteile hat. In einem späteren Beitrag werde ich dann an einem Beispiel beschreiben, was man mit MEAN.JS machen kann.

Was ist MEAN.JS?

MEAN.JS ist eine Full-Stack-Software-Lösung, die dabei hilft eine Web-Anwendung schnell, robust und in Produktion besser wart bar zu machen. Dabei werden die Technologien MongoDB, Express, AngularJS und Node.JS verwendet. Daher kommt auch der Name MEAN.

MEAN.JS Logo - Maxham.de
MEAN.JS

Warum MEAN.JS?

MEAN.JS hilft dabei unnötige Routinearbeiten und häufige Fehler während der Laufzeit der Anwendung zu vermeiden. Das Hauptziel ist es, eine einfache und gut lesbare OpenSource-Lösung zu verwenden, die man in seinen Webprojekte verwenden kann und vertrauen kann.

Die MEAN Komponenten

Fangen wir mit MongoDB an. MongoDB ist eine NoSQL-Datenbank und im Großen und Ganzen JSON (oder JSONB) Dokumente verwaltet. Die Dokumentation von MongoDB ist gigantisch umfangreich und hilft sicherlich, MongoDB besser zu verstehen.

Express.js – ist ein serverseitiges Web-Application-Framework, das für die JavaScript basierende Plattform Node.js läuft.

Angular.js – ist ein clientseitiges JavaScript MVC-Framework, das zur Erstellung von Single-Page-Webanwendungen verwendet wird. Das von Google entwickelte Framework ist eines der beliebtesten und führendsten Frameworks in diesem Bereich.

Node.js – ist eine serverseitige Plattform zum Betrieb von Netzwerkanwendung.

Voraussetzungen

  • GIT $ git –version
  • Node.js & npm $ npm install && npm install -g bower
  • MongoDB
  • Bower
  • Grunt $ npm install -g grunt-cli
  • Gulp (optional) $ npm install -g gulp

Wie man sehen kann, ist weder Express noch AngularJS in der Liste enthalten. Dies kommt daher, dass MEAN.JS die Abhängigkeiten automatisch installieren kann.

Download MEAN.JS

Es gibt zwei Möglichkeiten wie man MEAN.JS installieren kann. Die von mir bevorzugte Methode ist, das Git-Repository direkt in ein lokales Verzeichnis zu kopieren. Das geht mit dem folgenden Befehl:

$git clone https://github.com/meanjs/mean.git meanjs

Mit diesem Befehl wird die aktuelle Version von MEAN.JS in das lokale Verzeichnis „meanjs“ geklont. Alternativ kann man sich den Build direkt als ZIP-Datei herunterladen.

$wget https://github.com/meanjs/mean/archive/master.zip

MEANJS installieren

Nachdem MEAN.JS nach den oben genannten Schritten in ein Verzeichnis kopiert wurde, muss folgender Befehl ausgeführt werden:

$npm install

Mit diesem Befehl werden alle Abhängigkeiten, die für die Anwendung benötigt werden installiert. Anschließend kann man die Anwendung mit dem Befehl $grunt starten. Sollten mit diesem Befehl Warnungen angezeigt werden, kann versucht werden diese mit $grunt -serve ODER $ grunt -force zu umgehen. Ein Versuch die Anwendung mit $grunt -force auszuführen sollte jedoch vermieden werden.