Email

E-Mails senden mit PHPMailer

PHPMailer ist die meistgenutzte Bibliothek zum Senden von E-Mails aus PHP. Es kapselt SMTP, sodass Sie Host, Port und Zugangsdaten einmal konfigurieren und dann Nachrichten über eine klare Objekt-API erstellen und senden. Die in PHP eingebaute mail()-Funktion bietet zu wenig (keine Authentifizierung, schwache Fehlerausgabe), weshalb die meisten Projekte stattdessen PHPMailer verwenden. Hier ist ein vollständiger, funktionsfähiger Versand.

Wie installieren Sie PHPMailer?

Verwenden Sie Composer:

composer require phpmailer/phpmailer

Laden Sie dann den Autoloader und importieren Sie die benötigten Klassen:

<?php
require "vendor/autoload.php";

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

Wie konfigurieren Sie SMTP und senden eine Nachricht?

Erstellen Sie eine PHPMailer-Instanz, schalten Sie sie mit isSMTP() in den SMTP-Modus und setzen Sie die Verbindungs- und Nachrichtenfelder. Umschließen Sie den Aufruf mit try/catch, damit ein fehlgeschlagener Versand gemeldet statt verschluckt wird:

<?php
$mail = new PHPMailer(true); // true enables exceptions

try {
    // Server settings
    $mail->isSMTP();
    $mail->Host       = "smtp.example.com";
    $mail->SMTPAuth   = true;
    $mail->Username   = getenv("SMTP_USER");
    $mail->Password   = getenv("SMTP_PASS");
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // Recipients
    $mail->setFrom("you@yourdomain.com", "Your App");
    $mail->addAddress("recipient@example.org", "Recipient Name");

    // Content
    $mail->isHTML(true);
    $mail->Subject = "Your receipt";
    $mail->Body    = "<p>Thanks for your order.</p>";
    $mail->AltBody = "Thanks for your order. This is the plain-text version.";

    $mail->send();
    echo "Message sent.";
} catch (Exception $e) {
    echo "Send failed: {$mail->ErrorInfo}";
}

Ein paar Details, die häufig Probleme bereiten. SMTPSecure und Port gehören zusammen: Verwenden Sie ENCRYPTION_STARTTLS mit 587 oder ENCRYPTION_SMTPS mit 465. isHTML(true) teilt PHPMailer mit, dass der Body HTML ist und AltBody als Klartext-Alternative gesendet werden soll. Übergeben Sie true an den Konstruktor, damit Fehler eine Exception auslösen, statt stillschweigend false zurückzugeben.

Wie fügen Sie einen Anhang hinzu?

Rufen Sie addAttachment mit einem Dateipfad vor send() auf:

<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");

Das zweite Argument benennt die Datei so um, wie der Empfänger sie sieht. Sie können es mehrfach aufrufen, um mehrere Anhänge hinzuzufügen.

Senden mit Bird

PHPMailer spricht SMTP, das heißt im Produktivbetrieb brauchen Sie einen Mailserver mit sauberer Reputation, korrekten Authentifizierungseinträgen und einer Möglichkeit zu sehen, was nach dem Versand passiert ist. Eine HTTP API macht den Server überflüssig. Sie senden JSON über HTTPS und erhalten eine strukturierte Antwort. Mit der Bird-E-Mail-API ist dieselbe Nachricht ein einziger Aufruf:

use Bird\Bird;

$bird = new Bird(getenv("BIRD_API_KEY"));

$bird->emails->send([
  "from"    => "you@yourdomain.com",
  "to"      => "delivered@bird.dev",
  "subject" => "Hello from PHP",
  "html"    => "<p>It works.</p>",
]);

Die delivered@bird.dev-Sandbox-Adresse nimmt immer E-Mails an, sodass Sie die Integration prüfen können, bevor Sie an echte Postfächer senden. Kein SMTP-Socket, keine Portwahl, keine Reputation, die Sie selbst aufbauen müssen.

FAQ

Warum nicht einfach PHPs mail()-Funktion verwenden?

mail() übergibt die Nachricht ohne SMTP-Authentifizierung und fast ohne Fehlerausgabe an das lokale sendmail-Binary. PHPMailer authentifiziert sich gegenüber einem entfernten Server, unterstützt TLS, erstellt mehrteilige Nachrichten und teilt Ihnen mit, warum ein Versand fehlgeschlagen ist.

Was ist der Unterschied zwischen Body und AltBody?

Body ist die HTML-Version und AltBody der Klartext-Fallback. Wenn isHTML(true) gesetzt ist, zeigen Clients, die kein HTML rendern können, AltBody an, was auch bei der Zustellbarkeit hilft.

STARTTLS oder SMTPS?

ENCRYPTION_STARTTLS auf Port 587 hebt eine unverschlüsselte Verbindung auf TLS an, während ENCRYPTION_SMTPS auf Port 465 von Anfang an verschlüsselt ist. Passen Sie die Einstellung an den Port an, den Ihr Mailserver erwartet.

PHPMailer ist das richtige Werkzeug, wenn Sie aus PHP über SMTP senden möchten. Wenn Sie lieber auf den eigenen Server verzichten, zeigt die Anleitung zum E-Mail-Versand den API-Weg im Detail.

Bauen Sie auf demselben Netzwerk auf.

Ein Test-API-Schlüssel steht Ihnen sofort zur Verfügung. Der Produktivbetrieb wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Ihre nächste Idee.
Bereit zur Verbindung.