E-Mail Versand · 3 min read · Oct 25, 2025

E-Mail-Versand von PHP

E-Mail-Versand von PHP

Dieses Tutorial zeigt, wie Sie ganz einfach E-Mail-Nachrichten von einem PHP-fähigen Webserver senden können. Es kann zur Verarbeitung von Formulardaten, zum Versenden von Benachrichtigungen usw. verwendet werden. Es erklärt auch ein wenig über die Formatierung von E-Mail-Headern.

Systemkonfiguration

Offensichtlich müssen Sie einen Webserver zusammen mit PHP installiert haben. Sie müssen auch sicherstellen, dass Ihr Betriebssystem einen E-Mail-Agenten installiert hat (zum Beispiel Sendmail unter Linux oder den SMTP-Dienst unter IIS). Und stellen Sie sicher, dass Port 25 nicht blockiert ist. Dies ist erforderlich, selbst wenn Sie Nachrichten über einen zweiten Server weiterleiten.

PHP hat die mail-Funktion standardmäßig aktiviert. Sie können jedoch die zusätzlichen Optionen in der Datei ‘php.ini’ im Abschnitt [mail function] (Zeile # um 700) angeben.

Syntax

Hier ist die vollständige Syntax des mail()-Befehls:

bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );

Die ersten 3 Parameter benötigen keine Erklärung: E-Mail-Adresse des Empfängers, Betreff der Nachricht, Inhalt der Nachricht. $additional_headers Parameter umfasst E-Mail-Header, die ich später auflisten werde. $additional_parameters wird verwendet, um optionale spezifische Optionen für das Programm, das zum Senden von E-Mails verwendet wird (wie Sendmail), zu übergeben und wird selten verwendet. Sie müssen die Man-Seiten von Sendmail für die Liste der Optionen überprüfen.

Das absolute Minimum erfordert, dass Sie Folgendes angeben:

mail ( $email_address_to , $subject, $message_contents );

Es wird jedoch empfohlen, zusätzliche Header aus Compliance-Gründen zu definieren. Die E-Mail-Nachricht muss mit RFC #822 kompatibel sein.

Das folgende Beispiel zeigt einige E-Mail-Header, die verwendet werden können:

  • Von: Die E-Mail-Adresse des Absenders.
  • Antworten-an: Die E-Mail-Adresse, an die Antworten gesendet werden sollen.
  • Rückweg: Dies wird verwendet, falls die Nachricht nicht zugestellt wird und zurückgegeben werden muss.
  • Betreff: Betreff der E-Mail.
  • CC: Carbon Copy. Eine durch Kommas getrennte Liste von weiteren Empfängern, die von allen anderen Empfängern gesehen werden.
  • BCC: Blind Carbon Copy. Eine durch Kommas getrennte Liste von weiteren Empfängern, die von keinem anderen Empfänger gesehen werden.
  • Content-type: Definiert den MIME-Typ der Nachricht.
  • X-Mailer: Gibt den E-Mail-Client an, der zum Senden der Nachricht verwendet wird.

Wichtig ist, dass die Header-Namen groß- und kleinschreibungsempfindlich sind und dass jeder Header mit return und newline Zeichen enden muss.

Jede Nachricht wird über mindestens 2 E-Mail-Server (Absender und Empfänger) geleitet. Es können jedoch mehr E-Mail-Server auf der Route vorhanden sein, wie Relay-Server, AntiSPAM-Server usw. Jeder von ihnen fügt Ihrer Nachricht seine eigenen Header hinzu. Sie müssen auch bedenken, dass Ihr Webserver, abhängig von den Einstellungen, einige Header-Felder wie Return-Path austauschen kann. Beachten Sie, dass dieses Feld die Antwortadresse nicht beeinflusst.

Beispiel

Hier ist ein einfaches Beispiel, das eine E-Mail-Nachricht sendet:

Vollständiges Beispiel

Dieses Beispiel zeigt eine besser organisierte Struktur mit mehr Optionen und mehr Headern:

";
   $email_return_to = "[email protected]";
   $email_content_type = "text/html; charset=us-ascii";
   $email_client = "PHP/" . phpversion();
// ------------------------- //

// --- HEADER DEFINIEREN --- //
   $email_header = "Von: " . $email_sender . "\r\n";
   $email_header .= "Antworten-an: " . $email_return_to . "\r\n";
   $email_header .= "Rückweg: " . $email_return_to . "\r\n";
   $email_header .= "Content-type: " . $email_content_type . "\r\n";
   $email_header .= "X-Mailer: " . $email_client . "\r\n";
// ---------------------- //

// --- BETREFF UND INHALT --- //
   $email_subject = "Test-E-Mail-Betreff";
   $email_contents = "";
   $email_contents .= "

Test-E-Mail

"; $email_contents .= "
Absender: " . $email_sender; $email_contents .= "
Empfänger: " . $email_recipient; $email_contents .= ""; // ---------------------------- // $email_result = mail($email_recipient, $email_subject, $email_contents, $email_header); if ($email_result) echo "E-Mail wurde gesendet!"; else echo "E-Mail ist fehlgeschlagen!"; ?>
  • Hinweis: Die Windows-Implementierung von mail() unterscheidet sich in vielerlei Hinsicht von der Unix-Implementierung. Erstens verwendet sie kein lokales Binary zum Verfassen von Nachrichten, sondern arbeitet nur mit direkten Sockets, was bedeutet, dass ein MTA benötigt wird, der auf einem Netzwerk-Socket lauscht (der entweder auf dem localhost oder auf einer entfernten Maschine sein kann). Zweitens werden die benutzerdefinierten Header wie Von:, Cc:, Bcc: und Datum: zunächst nicht vom MTA interpretiert, sondern von PHP geparst. Daher sollte der to-Parameter keine Adresse in der Form von “Etwas < [email protected] >” sein. Der mail-Befehl kann dies möglicherweise nicht richtig parsen, während er mit dem MTA kommuniziert.
  • Hinweis: Es ist erwähnenswert, dass die mail()-Funktion nicht für größere E-Mail-Mengen in einer Schleife geeignet ist. Diese Funktion öffnet und schließt für jede E-Mail einen SMTP-Socket, was nicht sehr effizient ist.
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.