E-Mails senden mit PHPMailer

Mit PHPMailer senden Sie E-Mails, indem Sie phpmailer/phpmailer mit Composer installieren, Ihren SMTP-Server und den TLS-Modus mit isSMTP() konfigurieren und $mail->send() innerhalb eines try/catch-Blocks aufrufen.

Die in PHP eingebaute Funktion mail() übergibt Nachrichten an das lokale sendmail-Binary, ohne SMTP-Authentifizierung, ohne TLS-Aushandlung und ohne strukturierte Fehlerausgabe. PHPMailer ergänzt PHP-Anwendungen um einen SMTP-Client, MIME-Formatierung und Unterstützung für Anhänge.

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}";
}

Wählen Sie SMTPSecure passend zum Port Ihres Servers: ENCRYPTION_STARTTLS auf Port 587 stuft eine unverschlüsselte Verbindung auf TLS hoch, und ENCRYPTION_SMTPS auf Port 465 handelt TLS sofort aus. Wenn Sie isHTML(true) setzen, wird Body als HTML gekennzeichnet und AltBody als Klartextteil für Clients eingefügt, die kein HTML darstellen. Beide Teile mitzusenden verbessert außerdem die Zustellbarkeit. Wenn Sie true an den Konstruktor übergeben, lösen Fehler eine Exception aus, statt 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

Um E-Mails aus PHP über HTTPS zu senden, ohne eine SMTP-Verbindung zu verwalten, installieren Sie das Bird PHP SDK (composer require messagebird/sdk) und rufen $bird->email->send() auf:

<?php
use MessageBird\Bird;

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

$message = $bird->email->send(
    from: "onboarding@messagebird.dev",
    to: ["delivered@messagebird.dev"],
    subject: "Hello from PHP",
    html: "<p>It works.</p>",
);

echo $message->getId(), " ", $message->getStatus(), "\n";

Mit dem Absender onboarding@messagebird.dev und dem Sandbox-Empfänger delivered@messagebird.dev prüfen Sie Ihren API-Schlüssel und Ihre Nutzdaten, bevor Sie eine eigene Domain konfigurieren.

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.