77 Stimmen

PHP: Eine E-Mail versenden

Tutorial von Stefan Trost | Letztes Update am 19.01.2023 | Erstellt am 21.01.2014

In diesem Tutorial möchte ich euch zeigen, wie ihr mit PHP eine E-Mail versenden könnt. Dazu benutzen wir die PHP-Funktion mail().

Wir schauen uns zunächst ein sehr einfaches Beispiel für das Versenden einer E-Mail an und schauen danach, wie wir E-Mails an mehrere Empfänger versenden können, wie wir mehrzeilige E-Mails verfassen können, wie wir Einfluss auf den Absender, CC und BCC nehmen können und wie der Versand von HTML-E-Mails möglich ist.

Eine einfache E-Mail versenden

Bevor wir uns um Header und weitere Feinheiten kümmern, schauen wir uns zunächst an, wie man eine einfache Text-Mail an einen einzelnen Empfänger senden kann:

<?php
  mail('empfaenger@example.com', 'Betreff', 'Hallo');
?>

Mit dieser Zeile versenden wir die Nachricht "Hallo" an die E-Mail Adresse "empfaenger@example.com". Der Betreff (Subject) unserer E-Mail ist das Wort "Betreff". Als ersten Parameter der mail-Funktion übergeben wir also den Empfänger, als zweiten den Betreff und als dritten die Nachricht.

Mehrere Empfänger und Empfänger-Namen

Im ersten Beispiel senden wir die E-Mail an nur einen Empfänger ohne gesondert angegeben Namen. Wollen wir mehrere Empfänger angeben, können wir diese einfach mit einem Komma trennen:

$empf = 'empfaenger1@example.com, empfaenger2@example.com';
mail($empf, 'Betreff', 'Hallo');

Diese Mail geht also sowohl an "empfaenger1@example.com" als auch an "empfaenger2@example.com".

Außerdem lassen sich für die Empfänger auch noch Namen definieren, die dann im E-Mail-Programm angezeigt werden können:

$empf = 'Name 1 <empf1@example.com>';
mail($empf, 'Betreff', 'Hallo');

$empf = 'Name 1 <empf1@example.com>, Name 2 <empf2@example.com>';
mail($empf, 'Betreff', 'Hallo');

Das Beispiel zeigt, wie wir dies für einen oder zwei Empfänger realisieren können. Die E-Mail Adresse wird einfach in < und > eingeschlossen und der Name davor geschrieben.

Mehrzeilige E-Mails

Mit dem Zeichen "\r\n" können wir einen Zeilenumbruch in unseren Text der E-Mail einfügen:

$msg = 'Zeile 1' . "\r\n" . 'Zeile 2';
mail('empf@example.com', 'Betreff', $msg);

$msg = "Zeile 1\r\nZeile 2";
mail('empf@example.com', 'Betreff', $msg);

Wichtig ist hier, dass wir das "\r\n" immer in doppelte Anführungszeichen schreiben. Sonst wird das "\r\n" nicht als Zeilenumbruch interpretiert.

Absender, CC und BCC

Wenn wir einen besonderen Absender definieren möchten oder optional weitere CC oder BCC Empfänger hinzufügen wollen, müssen wir diese Informationen in den Header unserer E-Mail schreiben. Den Header können wir der mail-Funktion als vierten, optionalen Parameter übergeben.

$header  = 'TO: Name <empfaenger@example.com>' . "\r\n";
$header .= 'FROM: Name <absender@example.com>' . "\r\n";
$header .= 'CC: ccempf@example.com' . "\r\n";
$header .= 'BCC: bccempf@example.com' . "\r\n";

mail('empfaenger@example.com', 'Betreff', 'Hallo', $header);

Natürlich können wir hier die CC- und BCC-Zeilen auch weglassen um nur die Namen von Absender und Empfänger anzugeben.

HTML E-Mails

Bisher haben wir nur reine Text-Mails versenden. Zuletzt wollen wir uns ansehen, wie man eine HTML-Email versenden kann.

Auch HTML-Mails lassen sich über die gleiche mail-Funktion versenden, die wir bisher benutzt haben. Der Unterschied besteht darin, dass wir weitere Angaben im Header machen müssen, damit das Mail-Programm weiß, dass er diese Mail als HTML Mail interpretieren muss.

Die Nachricht geben wir dann einfach im HTML-Format an, ganz so wie auch eine Internetseite aufgebaut ist.

$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$header .= 'To: Empfaenger Name <empfaenger@example.com>' . "\r\n";
$header .= 'From: Absender Name <absender@example.com>' . "\r\n";

$msg = "
<html>
  <head>
    <title>Betreff</title>
  </head>
  <body>
    <h1>Überschrift</h1>
    <p>Absatz 1</p>
    <p>Absatz 2</p>
  </body>
</html>
";

mail('empfaenger@example.com', 'Betreff', $msg, $header);

Der HTML-Teil der E-Mail ist mit der Charset-Angabe unter "Content-Type" zwar als UTF-8 gekennzeichnet, zu Problemen kann es aber noch kommen, wenn auch im Absender oder im Betreff besonders codierte UTF-8-Zeichen wie Umlaute auftauchen.

In diesem Fall bietet sich die folgende Vorgehensweise an:

$abs     = '=?UTF-8?B?'.base64_encode('Martin Müller').'?=';

$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$header .= 'From: ' . $abs . ' <abs@example.com>' . "\r\n";

$subject = '=?UTF-8?B?'.base64_encode('Betreff mit Ä, Ö und Ü').'?=';

$msg = "
<html>
  <head>
    <title>Betreff mit Ä, Ö und Ü</title>
  </head>
  <body>
    <h1>Überschrift</h1>
    <p>Absatz 1</p>
    <p>Absatz 2</p>
  </body>
</html>
";

mail('empfaenger@example.com', $subject, $msg, $header);

Hier kodieren wir mit base64_encode() den kritischen Absender und den Betreff in eine String-Form ohne 8-Bit-Zeichen, damit diese unbeschadet übertragen werden können. Dadurch dass wir den kodierten Teil mit "=?UTF-8?B?" und "?=" einschließen, weiß das E-Mail Programm wie es diesen Teil korrekt darstellen kann.

Ausführlichere Informationen zu dieser Vorgehensweise findet ihr in dem Artikel zu UTF-8 Headern von E-Mails.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.