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!";
?>
[email protected]>- 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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.