PHP: E-Mails verschicken
Übersicht
HTML-Mails
Mehrteilige E-Mails
E-Mails mit Anhängen
HTML-Mails mit Anhängen
HTML-Mails mit Grafiken
HTML-Mails mit Grafiken und Anhängen
MIME-Typ ermitteln
E-Mails an mehrere Empfänger
Mit der PHP-Funktion mb_send_mail() ist es möglich, E-Mails abzusenden, sofern diese Funktion serverseitig unterstützt wird. Auf entfernten Servern sollte dies in der Regel der Fall sein. In einer lokalen Entwicklungsumgebung wird man mit dieser Funktion hingegen wahrscheinlich Probleme haben. Daher muss man die hier beschriebenen Beispiele erst auf einen entfernten Server hochladen, um sie testen zu können.
Das folgende Skript veranschaulicht die Grundformulierung der mb_send_mail()-Funktion:
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "Nur-Text-Mail";
- $body .= "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.".$eol.$eol;
- $body .= "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
Die Funktion mb_send_mail() benötigt vier Angaben: Die Zieladresse ($to), den Betrefftext ($subject), den eigentlichen E-Mail-Text ($body) sowie Angaben zum E-Mail-Header ($header). Die ersten drei Angaben sollten sich selbst erklären, während die Angaben für den E-Mail-Header sich nicht unbedingt intuitiv erschließen lassen.
Der Header enthält Informationen, die für den Transport und die Darstellung der Mail in einem entsprechenden Client-Programm von Bedeutung sind. Zum Vergleich kann man sich einmal den Quelltext einer E-Mail in einem solchen Programm ansehen.
Wichtig sind vor allem der MIME-Typ, die Zeichenkodierung und die Transferkodierung. Was es mit diesen Angaben genau auf sich hat, sollte im weiteren Verlauf dieses Tutorials deutlich werden, wenn E-Mails erzeugt werden, die aus mehreren Teil bestehen. Weiterhin wird der Absender mit Namen und E-Mail-Adresse angegeben (Zeile 15).
Die Funktion mb_send_mail() gehört zu den Multibyte-Funktionen von PHP und stellt somit sicher, dass Zeichen außerhalb des ASCII-Zeichensatzes (ein Byte pro Zeichen) korrekt übermittelt werden. Um diese Funktionen verwenden zu können, muss mit mb_internal_encoding() zunächst die gewünschte Zeichenkodierung in Zeile 2 angegeben werden.
Bei der Erzeugung des Quelltextes einer E-Mail sind die Zeilenumbrüche besonders zu beachten. Damit es hier zu keinen Problemen kommt, sollte man das Zeichen für den Zeilenumbruch von PHP ermitteln lassen (PHP_EOL in Zeile 3) und die entsprechende Variable für die Umbrüche verwenden.
HTML-Mails
Das Beispiel oben erzeugt nun eine gewöhnlich Nur-Text-Mail ohne jede Formatierungen. Dies wird durch die Angabe Content-Type: text/plain angezeigt. Es ist aber auch möglich, E-Mails als HTML zu verschicken. Dabei wird der Body der E-Mail wie eine ganz normale HTML-Seite angelegt. Beim Absenden muss dann allerdings die Angabe Content-Type: text/html gemacht werden.
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "HTML-Mail";
- $body = "<!DOCTYPE html><html><head><title>Mail</title><meta charset='UTF-8'></head><body>";
- $body .= "<h3>HTML-Mail</h3>";
- $body .= "<p>Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. <span><b>Naisjakefein defetot seteuke re Jeschefe</b></span>. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.</p>";
- $body .= "<p>Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.</p>";
- $body .= "</body></html>";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: text/html; charset=\"utf-8\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
Die Zeilen einer E-Mail werden im Quelltext üblicherweise nach 76 Zeichen umgebrochen. Dies geschieht mit PHP automatisch. Selbst wenn der Umbruch innerhalb eines Wortes oder gar eines HTML-Tags erfolgt, sollte die E-Mail von einem Client-Programm korrekt dargestellt werden, da es die Umbrüche vor der Darstellung in der Regel wieder entfernt.
Die Verwendung von CSS in HTML-E-Mails kann eine Herausforderung sein, da manche Webmailer oder möglicherweise auch E-Mail-Clients den Quelltext der Mail vor der Darstellung umschreiben und dabei Style-Sheet-Angaben verloren gehen, wenn sie an der ›falschen‹ Stelle gemacht wurden. Das muss man im Einzelfall testen. Eine sichere wenn auch umständliche Methode ist die Notierung der CSS-Formatierungen als Inline-Styles über das style-Attribut in den HTML-Tags. Weitere Überlegungen zu diesem Thema gibt es bei A List Apart.
Mehrteilige E-Mails (multipart/alternative)
Werden HTML-E-Mails verschickt, sollte man den Body der Mail zusätzlich als Nur-Text-Version mitschicken, da es sein kann, dass der Empfänger die Mail mit einem Programm lesen möchte, das HTML nicht unterstützt. Daher muss man den Inhalt der Mail nun in zwei unabhängige Abschnitte aufteilen. Dieses Verfahren wird in abgewandelter Weise ebenfalls für Mails angewendet, die Datei-Anhänge oder Bilder innerhalb des Bodys enthalten.
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "Nur-Text- mit HTML-Mail";
- $p1 = "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.";
- $p2 = "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $boundary1 = "x------------plain_text_and_html";
- # Hier beginnt der Nur-Text-Teil
- $body = "--".$boundary1.$eol;
- $body .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= $p1.$eol.$eol.$p2.$eol.$eol;
- # Hier beginnt der HTML-Teil
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: text/html; charset=\"utf-8\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= "<!DOCTYPE html><html><head><title>Mail</title><meta charset='UTF-8'></head><body>";
- $body .= "<h3>HTML-Mail</h3>";
- $body .= "<p>".$p1."</p>";
- $body .= "<p>".$p2."</p>";
- $body .= "</body></html>".$eol.$eol;
- # Hier endet der Mail-Body
- $body .= "--".$boundary1."--";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: multipart/alternative;".$eol;
- $header .= " boundary=\"".$boundary1."\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
Die verschiedenen Teile der Mail werden durch eine so genannte boundary von einander getrennt. Die Zeichenkette dafür ist prinzipiell frei wählbar, darf aber nur ASCII-Zeichen enthalten. Diese Trennung wird nun am Anfang jedes einzelnen Teils angegeben, wobei ihr immer zusätzlich zwei Minuszeichen -- vorangestellt werden müssen (Zeilen 10, 16 und 26), damit der Interpreter des Quelltextes erkennt, dass an dieser Stelle der Trennstring folgt. Darauf folgen die Angaben für Content-Type und Content-Transfer-Encoding des jeweiligen Teils. Am Ende des letzten Teils wird die Mail mit der Trennung abgeschlossen, wobei die zwei Minuszeichen dort zusätzlich noch ans Ende des Strings angefügt werden (Zeile 26). Die Position und Anzahl der Zeilenumbrüche sind zu beachten, da es sonst zu Fehlern bei der Interpretation des Quelltextes der Mail kommen kann.
Schließlich werden im Header der Mail der Content-Type: multipart/alternative sowie der Trennstring und die Transferkodierung angegeben (Zeilen 33 bis 35).
E-Mails mit Anhängen (multipart/mixed)
Bei einer normalen Nur-Text-Mail werden die Anhänge ähnlich wie im obigen Beispiel der HTML-Mail in separaten Bereichen aufgeführt, die auch hier durch einen Trennstring von einander unterschieden werden.
Da E-Mails immer als Textdatei verschickt werden, müssen die Dateien, die angehängt werden sollen, erst entsprechend kodiert werden. Dies geschieht mit der Funktion base64_encode().
Um eine Datei nach Base64 zu kodieren, kann man folgendes PHP-Konstrukt auf die Datei anwenden:
$data = chunk_split(base64_encode(file_get_contents($path_to_file)));
In den folgenden Beispielen sind die Anhänge bereits in kodierter Form im Quelltext der Mail angegeben (Zeilen 24 bis 27 und 38 bis 68).
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "Mail mit Anhängen";
- $p1 = "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.";
- $p2 = "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $boundary1 = "x------------mail_with_attachments";
- # Hier beginnt der Nur-Text-Teil
- $body = "--".$boundary1.$eol;
- $body .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= $p1.$eol.$eol.$p2.$eol.$eol;
- # Hier beginnt der erste Anhang
- $filename = "ÄÜÖ.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "R0lGODlhDwAPALMOAP/qAEVFRQAAAP/OAP8AAP/JAP+0AP6dAP/9E//+k///x///6zMzM//l
- AAAAAAAAACH5BAEAAA4ALAAAAAAPAA8AAARd0EkZap3Y1aVSGhcWcAgCnMMRTEEnCCfwpquW
- mHEOagoOn7+CKnADxoKGSiLHBBSSAROjCWA8KwPZa7sVrgJZAWE8FhR2msGgESAHziqWutB+
- 0zIVg94wzLAsNRMRADs=".$eol.$eol;
- # Hier beginnt der zweite Anhang
- $filename = "äöüß.rtf";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "e1xydGYxXGFuc2lcZGVmZjNcYWRlZmxhbmcxMDI1CntcZm9udHRibHtcZjBcZnJvbWFuXGZwcnEy
- XGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjFcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MiBT
- eW1ib2w7fXtcZjJcZnN3aXNzXGZwcnEyXGZjaGFyc2V0MCBBcmlhbDt9e1xmM1xmcm9tYW5cZnBy
- cTJcZmNoYXJzZXQwIFRpbWVzIE5ldyBSb21hbjt9e1xmNFxmc3dpc3NcZnBycTJcZmNoYXJzZXQw
- IEFyaWFsO317XGY1XGZzd2lzc1xmcHJxMlxmY2hhcnNldDEgRGVqYVZ1IFNhbnM7fXtcZjZcZm5p
- bFxmcHJxMlxmY2hhcnNldDAgQXJpYWwgVW5pY29kZSBNUzt9e1xmN1xmbmlsXGZwcnEyXGZjaGFy
- c2V0MCBGcmVlU2Fuczt9e1xmOFxmc3dpc3NcZnBycTBcZmNoYXJzZXQxIEZyZWVTYW5zO319Cntc
- Y29sb3J0Ymw7XHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQxMjhcZ3JlZW4xMjhcYmx1ZTEyODt9Cntc
- c3R5bGVzaGVldHtcczBcc25leHQwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlwaGxlYWQyXGh5
- cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUyMDUyXGRiY2hc
- YWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzEgTm9ybWFsO30Ke1xzMTVc
- c2Jhc2Vkb24wXHNuZXh0MTZcc2IyNDBcc2ExMjBca2VlcG5cZGJjaFxhZjZcZGJjaFxhZjdcYWZz
- MjhcbG9jaFxmNFxmczI4IFx1MjIwXCdkY2JlcnNjaHJpZnQ7fQp7XHMxNlxzYmFzZWRvbjBcc25l
- eHQxNlxzYjBcc2ExMjAgVGV4dGtcdTI0NlwnZjZycGVyO30Ke1xzMTdcc2Jhc2Vkb24xNlxzbmV4
- dDE3XHNiMFxzYTEyMFxkYmNoXGFmOCBMaXN0ZTt9CntcczE4XHNiYXNlZG9uMFxzbmV4dDE4XHNi
- MTIwXHNhMTIwXG5vbGluZVxpXGRiY2hcYWY4XGFmczI0XGFpXGZzMjQgQmVzY2hyaWZ0dW5nO30K
- e1xzMTlcc2Jhc2Vkb24wXHNuZXh0MTlcbm9saW5lXGRiY2hcYWY4IFZlcnplaWNobmlzO30KfXtc
- aW5mb3tcYXV0aG9yIEhvbGdlciBLb2NofXtcY3JlYXRpbVx5cjIwMTRcbW8xMFxkeTIzXGhyMTBc
- bWluMjZ9e1xyZXZ0aW1ceXIwXG1vMFxkeTBcaHIwXG1pbjB9e1xwcmludGltXHlyMFxtbzBcZHkw
- XGhyMFxtaW4wfXtcY29tbWVudCBMaWJyZU9mZmljZX17XHZlcm42NzE3NTE3MH19XGRlZnRhYjcw
- OQpcdmlld3NjYWxlNjkKe1wqXHBnZHNjdGJsCntccGdkc2MwXHBnZHNjdXNlNDUxXHBnd3N4bjEx
- OTA2XHBnaHN4bjE2ODM4XG1hcmdsc3huMTEzNFxtYXJncnN4bjExMzRcbWFyZ3RzeG4xMTM0XG1h
- cmdic3huMTEzNFxwZ2RzY254dDAgU3RhbmRhcmQ7fX0KXGZvcm1zaGFkZVxwYXBlcmgxNjgzOFxw
- YXBlcncxMTkwNlxtYXJnbDExMzRcbWFyZ3IxMTM0XG1hcmd0MTEzNFxtYXJnYjExMzRcc2VjdGRc
- c2Jrbm9uZVxzZWN0dW5sb2NrZWQxXHBnbmRlY1xwZ3dzeG4xMTkwNlxwZ2hzeG4xNjgzOFxtYXJn
- bHN4bjExMzRcbWFyZ3JzeG4xMTM0XG1hcmd0c3huMTEzNFxtYXJnYnN4bjExMzRcZnRuYmpcZnRu
- c3RhcnQxXGZ0bnJzdGNvbnRcZnRubmFyXGFlbmRkb2NcYWZ0bnJzdGNvbnRcYWZ0bnN0YXJ0MVxh
- ZnRubnJsYwpccGduZGVjXHBhcmRccGxhaW4gXHMwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlw
- aGxlYWQyXGh5cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUy
- MDUyXGRiY2hcYWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzF7XHJ0bGNo
- IFxsdHJjaFxsb2NoXGxvY2hcZjUKTnVyIGVpbiBUZXN0Li4ufQpccGFyIH0=".$eol.$eol;
- # Hier endet der Mail-Body
- $body .= "--".$boundary1."--";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: multipart/mixed;".$eol;
- $header .= " boundary=\"".$boundary1."\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
Da die Anhänge Teile der E-Mail sind, die nicht dargestellt werden, muss die Information Content-Disposition: attachment angegeben werden (Zeilen 22 und 36). Für kodierte Dateien lautet die Content-Transfer-Encoding: base64. Der MIME-Typ der Datei kann explizit angegeben werden (z. B. Content-Type: image/gif), da dies aber unter Umständen dazu führt, dass das E-Mail-Programm des Empfängers versucht, diese Datei dennoch bereits in der E-Mail-Ansicht darzustellen, verwende ich lieber Content-Type: application/octet-stream. Sowohl für Content-Type als auch für Content-Disposition muss zusätzlich der Name der Datei angegeben werden, der aber mit mb_encode_mimeheader() kodiert werden sollte, um Multibyte-Zeichen korrekt zu übermitteln.
Für die E-Mail selbst wird Content-Type: multipart/mixed angegeben (Zeile 78).
HTML-Mails mit Anhängen
Jetzt wird das Skript schon etwas komplexer. Um eine HTML-Mail zu verfassen, die zusätzlich eine Nur-Text-Version sowie Anhänge enthält, müssen die einzelnen Bestandteile etwas verschachtelt werden. Dazu benötigt man nun zwei Trennstrings.
Schematisch sieht das etwa so aus:
--x------------mail_with_attachments
--x------------plain_text_and_html
Nur-Text-Version
--x------------plain_text_and_html
HTML-Version
--x------------plain_text_and_html--
--x------------mail_with_attachments
Anhang1
--x------------mail_with_attachments
Anhang2
--x------------mail_with_attachments--
Daraus ergibt sich für unser Beispiel folgendes Skript:
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "HTML-Mail mit Anhängen";
- $p1 = "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.";
- $p2 = "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $boundary1 = "x------------mail_with_attachments";
- $boundary2 = "x------------plain_text_and_html";
- # Hier beginnt der Nur-Text- plus HTML-Teil
- $body = "--".$boundary1.$eol;
- $body .= "Content-Type: multipart/alternative;".$eol;
- $body .= " boundary=\"".$boundary2."\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- # Hier beginnt der Nur-Text-Teil
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= $p1.$eol.$eol.$p2.$eol.$eol;
- # Hier beginnt der HTML-Teil
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: text/html; charset=\"utf-8\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= "<!DOCTYPE html><html><head><title>Mail</title><meta charset='UTF-8'></head><body>";
- $body .= "<h3>HTML-Mail</h3>";
- $body .= "<p>".$p1."</p>";
- $body .= "<p>".$p2."</p>";
- $body .= "</body></html>".$eol.$eol;
- # Hier endet der Nur-Text- plus HTML-Teil
- $body .= "--".$boundary2."--".$eol.$eol;
- # Hier beginnt der erste Anhang
- $filename = "ÄÜÖ.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "R0lGODlhDwAPALMOAP/qAEVFRQAAAP/OAP8AAP/JAP+0AP6dAP/9E//+k///x///6zMzM//l
- AAAAAAAAACH5BAEAAA4ALAAAAAAPAA8AAARd0EkZap3Y1aVSGhcWcAgCnMMRTEEnCCfwpquW
- mHEOagoOn7+CKnADxoKGSiLHBBSSAROjCWA8KwPZa7sVrgJZAWE8FhR2msGgESAHziqWutB+
- 0zIVg94wzLAsNRMRADs=".$eol.$eol;
- # Hier beginnt der zweite Anhang
- $filename = "äöüß.rtf";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "e1xydGYxXGFuc2lcZGVmZjNcYWRlZmxhbmcxMDI1CntcZm9udHRibHtcZjBcZnJvbWFuXGZwcnEy
- XGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjFcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MiBT
- eW1ib2w7fXtcZjJcZnN3aXNzXGZwcnEyXGZjaGFyc2V0MCBBcmlhbDt9e1xmM1xmcm9tYW5cZnBy
- cTJcZmNoYXJzZXQwIFRpbWVzIE5ldyBSb21hbjt9e1xmNFxmc3dpc3NcZnBycTJcZmNoYXJzZXQw
- IEFyaWFsO317XGY1XGZzd2lzc1xmcHJxMlxmY2hhcnNldDEgRGVqYVZ1IFNhbnM7fXtcZjZcZm5p
- bFxmcHJxMlxmY2hhcnNldDAgQXJpYWwgVW5pY29kZSBNUzt9e1xmN1xmbmlsXGZwcnEyXGZjaGFy
- c2V0MCBGcmVlU2Fuczt9e1xmOFxmc3dpc3NcZnBycTBcZmNoYXJzZXQxIEZyZWVTYW5zO319Cntc
- Y29sb3J0Ymw7XHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQxMjhcZ3JlZW4xMjhcYmx1ZTEyODt9Cntc
- c3R5bGVzaGVldHtcczBcc25leHQwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlwaGxlYWQyXGh5
- cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUyMDUyXGRiY2hc
- YWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzEgTm9ybWFsO30Ke1xzMTVc
- c2Jhc2Vkb24wXHNuZXh0MTZcc2IyNDBcc2ExMjBca2VlcG5cZGJjaFxhZjZcZGJjaFxhZjdcYWZz
- MjhcbG9jaFxmNFxmczI4IFx1MjIwXCdkY2JlcnNjaHJpZnQ7fQp7XHMxNlxzYmFzZWRvbjBcc25l
- eHQxNlxzYjBcc2ExMjAgVGV4dGtcdTI0NlwnZjZycGVyO30Ke1xzMTdcc2Jhc2Vkb24xNlxzbmV4
- dDE3XHNiMFxzYTEyMFxkYmNoXGFmOCBMaXN0ZTt9CntcczE4XHNiYXNlZG9uMFxzbmV4dDE4XHNi
- MTIwXHNhMTIwXG5vbGluZVxpXGRiY2hcYWY4XGFmczI0XGFpXGZzMjQgQmVzY2hyaWZ0dW5nO30K
- e1xzMTlcc2Jhc2Vkb24wXHNuZXh0MTlcbm9saW5lXGRiY2hcYWY4IFZlcnplaWNobmlzO30KfXtc
- aW5mb3tcYXV0aG9yIEhvbGdlciBLb2NofXtcY3JlYXRpbVx5cjIwMTRcbW8xMFxkeTIzXGhyMTBc
- bWluMjZ9e1xyZXZ0aW1ceXIwXG1vMFxkeTBcaHIwXG1pbjB9e1xwcmludGltXHlyMFxtbzBcZHkw
- XGhyMFxtaW4wfXtcY29tbWVudCBMaWJyZU9mZmljZX17XHZlcm42NzE3NTE3MH19XGRlZnRhYjcw
- OQpcdmlld3NjYWxlNjkKe1wqXHBnZHNjdGJsCntccGdkc2MwXHBnZHNjdXNlNDUxXHBnd3N4bjEx
- OTA2XHBnaHN4bjE2ODM4XG1hcmdsc3huMTEzNFxtYXJncnN4bjExMzRcbWFyZ3RzeG4xMTM0XG1h
- cmdic3huMTEzNFxwZ2RzY254dDAgU3RhbmRhcmQ7fX0KXGZvcm1zaGFkZVxwYXBlcmgxNjgzOFxw
- YXBlcncxMTkwNlxtYXJnbDExMzRcbWFyZ3IxMTM0XG1hcmd0MTEzNFxtYXJnYjExMzRcc2VjdGRc
- c2Jrbm9uZVxzZWN0dW5sb2NrZWQxXHBnbmRlY1xwZ3dzeG4xMTkwNlxwZ2hzeG4xNjgzOFxtYXJn
- bHN4bjExMzRcbWFyZ3JzeG4xMTM0XG1hcmd0c3huMTEzNFxtYXJnYnN4bjExMzRcZnRuYmpcZnRu
- c3RhcnQxXGZ0bnJzdGNvbnRcZnRubmFyXGFlbmRkb2NcYWZ0bnJzdGNvbnRcYWZ0bnN0YXJ0MVxh
- ZnRubnJsYwpccGduZGVjXHBhcmRccGxhaW4gXHMwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlw
- aGxlYWQyXGh5cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUy
- MDUyXGRiY2hcYWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzF7XHJ0bGNo
- IFxsdHJjaFxsb2NoXGxvY2hcZjUKTnVyIGVpbiBUZXN0Li4ufQpccGFyIH0=".$eol.$eol;
- # Hier endet der Mail-Body
- $body .= "--".$boundary1."--";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: multipart/mixed;".$eol;
- $header .= " boundary=\"".$boundary1."\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
HTML-Mails mit Grafiken
Eine HTML-Mail kann auch mit Grafiken und Bildern verschönert werden. Da diese aber nicht einfach nur als Anhang mitgeschickt, sondern dargestellt werden sollen, benötigen sie auch eine besondere Behandlung.
Zunächst einmal muss die Verschachtelung der Bestandteile der E-Mail angepasst werden.
Schematisch sieht das dann etwa so aus:
--x------------plain_text_and_html
Nur-Text-Version
--x------------plain_text_and_html
--x------------html_with_images
HTML-Version
--x------------html_with_images
Grafik1
--x------------html_with_images
Grafik2
--x------------html_with_images--
--x------------plain_text_and_html--
Daraus ergibt sich für unser Beispiel folgendes Skript:
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "HTML-Mail mit Grafiken";
- $p1 = "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.";
- $p2 = "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $boundary1 = "x------------plain_text_and_html";
- $boundary2 = "x------------html_with_images";
- # Hier beginnt der Nur-Text-Teil
- $body = "--".$boundary1.$eol;
- $body .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= $p1.$eol.$eol.$p2.$eol.$eol;
- # Hier beginnt der HTML-mit-Grafiken-Teil
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: multipart/related;".$eol;
- $body .= " boundary=\"".$boundary2."\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- # Hier beginnt der HTML-Teil
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: text/html; charset=\"utf-8\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= "<!DOCTYPE html><html><head><title>Mail</title><meta charset='UTF-8'></head><body>";
- $body .= "<h3>HTML-Mail</h3>";
- $body .= "<p>".$p1." <img src='cid:image1' alt=''></p>";
- $body .= "<p>".$p2." <img src='cid:image2' alt=''></p>";
- $body .= "</body></html>".$eol.$eol;
- # Hier beginnt die erste Grafik
- $filename = "ÄÜÖ.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: image/gif;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: inline;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-ID: <image1>".$eol.$eol;
- $body .= "R0lGODlhGgASANQUAEIyEsqaCvHSGphtBtSgCqaACOG7E9rVy2pTEqyOEHpqOurq4tuwEu7KGopi
- App6DqWafZSKZGVKDv7imv7+8nJiMnpiOv7iIu7CCuLi2rqCArqOCsaqEv7y8v7aGgAAACH/C05F
- VFNDQVBFMi4wAwEAAAAh+QQJCgAfACwAAAAAGgASAAAF2+AnftQBKZKkQAc1vvC4QEjCNA1XINAS
- /4fKQ+ApegQNw6By+L0yCI7nQq0eMRtExvnpRBLTC6A69iQfEQpgDTsgBOT4RYBhrDUYDeAFAcvF
- VGZ2Exp4eyMWBmGAVGMXZgZrhHmHHxINi1WakAATnZQjl5magQ12GBMToCIVDHCkmnQMGwAYqyIQ
- BZiOpB4ABgQDEGuVIm4GRLyBtQwEEk0/XgUYDQLExHXBER1cUBsG1DgNGAbNO1tcH0EDDAwG5c0B
- DkzpMhASAxsEBBsDEj31XpQ4kWJFi4AhAAAh+QQJCgAfACwAAAAAGAASAAAF3OAnftQBKZKkQAc1
- vvC3QEjCNA1XINASw4fKQ+ApegQNw6By+IkyCI7nQq0eMRtE5teJJKYXQFXsST4iLoBadEAIxvCL
- AMOQHAATDUYN+cbDVGUMA2p5GBoAFgZggFRiF2UGeHh6iBINjFWakQAYE3h5AJeZmoENDAGdExOH
- ABUMb6WacwwbCp2tHxAFmI+lHgAGBAMQH2oAbAgGRL6BnQwEdjFdBRgNAsfHdMMRHT9QGwbWOA0Y
- BtA7W05BAwwMBufQAQ5MTiMzEgMbBAQbAxI97L0ocSLFihYCQwAAIfkECQoAHwAsAAAAABoAEgAA
- BeHgJ37UASmSpEAHNb7wuEBIwjQNVyDQEv+HykPgKXoEDcOgcvi9MgiO50KtHjEbRMb56UQS0wug
- OvYkHxGXCMAWHRACsvwiwDAkzfVEw4aA52JUZgwDEGwAexh8FgZhgVRjF2YGGwqIiBqKABINjlWf
- kwEIiIl8H5yen4INDKIAGBMTmh8VDHGqn3UMlR+vsx8QBZ2Rqh4ABgSFa21uCAZExIKvDAR4Tl4F
- GA0Ch4d2yREdXFAbBto4DRgG1DtbXB9BAwwMBuvUAQ5M7zIQEgMbBAhsGCChx74XJU6kWNHiYAgA
- IfkEBQoAHwAsAAAAABgAEgAABdzgJ37UASmSpEAHNb7wt0BIwjQNVyDQEsOHykPgKXoEDcOgcviJ
- MgiO50KtHjEbRObXiSSmF0BV7Ek+Ii6AWnRACMbwiwDDkBwAEw1GDfnGw1RlDANqeRgaABYGYIBU
- YhdlBnh4eogSDYxVmpEAGBN4eQCXmZqBDQwBnRMThwAVDG+lmnMMGwqdrR8QBZiPpR4ABgQDEB9q
- AGwIBkS+gZ0MBHYxXQUYDQLHx3TDER0/UBsG1jgNGAbQO1tOQQMMDAbn0AEOTE4jMxIDGwQEGwMS
- Pey9KHEixYoWAkMAACH+Km1hZGUgYnkgZGFtaWFuIGthbmcgYWthIGg0aGFtc3RlciBmb3IgaXBi
- AAA7".$eol.$eol;
- # Hier beginnt die zweite Grafik
- $filename = "ßäöü.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: image/gif;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: inline;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-ID: <image2>".$eol.$eol;
- $body .= "R0lGODlhJAASAMQVAAAAAEIxEGNSEHNjMXtjOZxjAJxzCJycY6WUe6Wce7WMCM6cCNalCN61EOe9
- EO/GEPfOGPfWGP/eGP/nIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F
- VFNDQVBFMi4wAwEAAAAh+QQJDwAVACwAAAAAJAASAAAF/mAljmSZEIJAJGXbJsLgVoigNJDDKAIy
- Dz2S4KE4tAYGSCQyWUIaBlnpoHAISAbH4ypcTL7gZo5XGjoM2IejOKIyA/AJPDB5GowiqhY9GuCs
- IwIQcmFgAREODVwVQ09SFQlADo40CkyFYRF2Pn45Kj4JBlAKEBBGBA2YhZoNCwQVB6UKogYwRAYC
- E1uMDnJ0qnAOC1eCEwIGVSk4EEkQr0MRARRz1NIBwlcEpc2KA0AppdkN0RTl5ucBDQrPSikxQIMT
- sxOvCKTk5+bXCwY+BBPIxAiAYQDXAGciBIzDh+5BKy4EIgApGMQMwFd5qiypFsDhggJ4KhAwMEEL
- FxgpL0ImvPGgVCkHiRaQIXHAnY8ZJEY22Nkg5sdHOIOOqIGMwQ5cN4UqHXEiBYGkSkMAACH5BAkP
- ABUALAAAAAAkABIAAAX+YCWOZJkQgkAkZTkISCuLiKA0kMMosHwoDgEpIRjIBgZIJDJZQhoGY0nw
- cBhIVMVhuph4v80cj/RzPK4jg1k4+jED8Ak8MHkatiLqUyoyVLUjAhByYF8BEQ4NbAM4QQQxIow5
- bAgKTIVgEXYxBxAQCgZQLAkvDnsVBA2YhZoNCwQVghMCBkACCaG1nlsCDnJ0q3AOC0IEnklPKQ+g
- AhMPQlQRARRz1dMBw9BKKUUvOBDIsKnSFOXm5wENCuITtWHd3J5ClUrT5+bYCwYxBBEvBgZgyJoA
- agKsWA2W2EP3wBUbVAYmrKlABGARCAfLKLTWcEEBPCIOcINExZeBg3ksbjzw5MlBogVjZowgkgLk
- CAKhGuh86ZGPzJ8jatRisCMgJKBIZ6JQcRRpCAAAIfkECQ8AFQAsAAAAACQAEgAABf5gJY5kmRCC
- QCRl2ybC4FaIoDSQwygCMg89kuChOLQGBkgkMllCGgZZ6aBwCEgGx+MqXEy+4GaOVxo6DNiHozii
- MgPwCTwweRqMIqoWPRrgrCMCEHJhYAERDg1cFUNPUhUJQA6ONApMhWERdj5+OSo+CQZQChAQRgQN
- mIWaDQsEFQelCqIGMEQGAhNbjA5ydKpwDgtXghMCBlUpOBBJEK9DEQEUc9TSAcJXBKXNigNAKaXZ
- DdEU5ebnAQ0Kz0opMUCDE7MTrwik5Ofm1wsGPgQTyMQIgGEA1wBnIgSMw4fuQSsuBCIAKRjEDMBX
- eaosqRbA4YICeCoQMDBBCxcYKS9CJrzxoFQpB4kWkCFxwJ2PGSRGNtjZIObHRziDjqiBjMEOXDeF
- Kh1xIgWBpEpDAAAh+QQFDwAVACwAAAAAJAASAAAF/mBVJcIgnuhICAKRpDAsPMoRI4LSQA6jCIiY
- 0OB4CGADAyQSmTAhDYMJCUQZHo4aSrCYeL9O3i91UDiOp8HufCo3A/AJPDCBGmynmcNwSgwEDlBT
- AhByYF8BEQ4NaBVlRXwjBlEKEBA2CApNh2ARdkEVM4IiMwoGAhNGFQQNnIeeDQsEFWo8LUECOxBK
- ELOAcnSucA4LRweWplF+fyyWRzMRARRz1NIBxM+FAgZmzV6mE7Os0RTl5ucBDQrilryMJAanA70V
- mUvS5+bXCwa4SywlTOiZYGAWqQZM8KF7EAsNAYIKwhwhwQKPiEcJqzFcUAAPgQh/4lURQkrHA0uW
- LRwsWjDmBAEDE4o0IrlqUoObKzlOQXEAICiaInBwY+Dj1E+gSEUkWHErqYgQAAA7".$eol.$eol;
- # Hier endet der HTML-mit-Grafiken-Teil
- $body .= "--".$boundary2."--".$eol.$eol;
- # Hier endet der Mail-Body
- $body .= "--".$boundary1."--";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: multipart/alternative;".$eol;
- $header .= " boundary=\"".$boundary1."\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
Über Content-Type: multipart/related (Zeile 18) wird die Information gegeben, dass die folgenden Bestandteile zusammen gehören. Im HTML-Quelltext wird nun statt eines normalen Grafik-Verweises eine Content-ID angegeben (cid, Zeilen 28 und 29), die sich bei der Deklaration der Grafik wiederfindet (Zeilen 41 und 73). Diese Content-ID kann ein beliebiger ASCII-String sein. Verschiedene Grafiken dürfen natürlich nicht die gleiche ID haben. Die Deklaration der Grafik wird durch Content-Disposition: inline ergänzt, um explizit auszudrücken, dass es sich nicht um einen Anhang (Content-Disposition: attachment) handelt.
HTML-Mails mit Grafiken und Anhängen
Die Krönung des E-Mail-Versands ist nun natürlich eine Mail, die alle der möglichen Komponenten enthält: HTML- und Nur-Text-Version, Inline-Grafiken und Anhänge.
Wieder muss die Verschachtelung der Bestandteile der E-Mail angepasst werden, wobei diese nun naheliegenderweise eine Kombination der letzten beiden Beispiele ist. In diesem Fall benötigt man drei Trennstrings.
Schematisch sieht das in diesem Fall dann etwa so aus:
--x------------mail_with_attachments
--x------------plain_text_and_html
Nur-Text-Version
--x------------plain_text_and_html
--x------------html_with_images
HTML-Version
--x------------html_with_images
Grafik1
--x------------html_with_images
Grafik2
--x------------html_with_images--
--x------------plain_text_and_html--
--x------------mail_with_attachments
Anhang1
--x------------mail_with_attachments
Anhang2
--x------------mail_with_attachments--
Daraus ergibt sich dann für das Beispiel folgendes Skript:
- <?php
- mb_internal_encoding("UTF-8");
- $eol = PHP_EOL;
- $subject = "HTML-Mail mit Grafiken und Anhängen";
- $p1 = "Marokeile geck mof Bekühka mieghär. Tepohne lesuk begichakre womorne. Lirebe rekoh kilage letäur. Naisjakefein defetot seteuke re Jeschefe. Bejihahgge maudetjelohs meis tesch ginimuki daibubopil setebseschpes neidauta sewije pe juleupu sickgagi hus reetatistöh teg bes wegrussumu fulod le sen we, vemaame ketbewene zehai bauck Ribke, rihebe taktekgale föswafref fekrofohbke Tiegepurten keb lukam, konzühs nehneukubee re bo.";
- $p2 = "Heilsubjöt mehuhckeno tegriskubhe libaar webopal gelite ke vaimohaub ravo vahnohde Matote sobgedadeu lobbuba döm vet te. Selegemep fobeke fel sühnaichohso gigichähte duk schu, tuzufmeekif, lakalzeresch süke res Woposieseb, lemjemigga, läh deinzul Faikes binöge. Fekogenef nerzischif fewekäh, ku he, log Kemek. Namohpmo kokegeme Heg dechuven, kati mofärerduk.";
- $boundary1 = "x------------mail_with_attachments";
- $boundary2 = "x------------plain_text_and_html";
- $boundary3 = "x------------html_with_images";
- # Hier beginnt der Mail-Body
- $body = "--".$boundary1.$eol;
- $body .= "Content-Type: multipart/alternative;".$eol;
- $body .= " boundary=\"".$boundary2."\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- # Hier beginnt der Nur-Text-Teil
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: text/plain; charset=\"utf-8\"; format=flowed".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= $p1.$eol.$eol.$p2.$eol.$eol;
- # Hier beginnt der HTML-mit-Grafiken-Teil
- $body .= "--".$boundary2.$eol;
- $body .= "Content-Type: multipart/related;".$eol;
- $body .= " boundary=\"".$boundary3."\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- # Hier beginnt der HTML-Teil
- $body .= "--".$boundary3.$eol;
- $body .= "Content-Type: text/html; charset=\"utf-8\"".$eol;
- $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
- $body .= "<!DOCTYPE html><html><head><title>Mail</title><meta charset='UTF-8'></head><body>";
- $body .= "<h3>HTML-Mail</h3>";
- $body .= "<p>".$p1." <img src='cid:image1' alt=''></p>";
- $body .= "<p>".$p2." <img src='cid:image2' alt=''></p>";
- $body .= "</body></html>".$eol.$eol;
- # Hier beginnt die erste Grafik
- $filename = "ÄÜÖ.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary3.$eol;
- $body .= "Content-Type: image/gif;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: inline;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-ID: <image1>".$eol.$eol;
- $body .= "R0lGODlhGgASANQUAEIyEsqaCvHSGphtBtSgCqaACOG7E9rVy2pTEqyOEHpqOurq4tuwEu7KGopi
- App6DqWafZSKZGVKDv7imv7+8nJiMnpiOv7iIu7CCuLi2rqCArqOCsaqEv7y8v7aGgAAACH/C05F
- VFNDQVBFMi4wAwEAAAAh+QQJCgAfACwAAAAAGgASAAAF2+AnftQBKZKkQAc1vvC4QEjCNA1XINAS
- /4fKQ+ApegQNw6By+L0yCI7nQq0eMRtExvnpRBLTC6A69iQfEQpgDTsgBOT4RYBhrDUYDeAFAcvF
- VGZ2Exp4eyMWBmGAVGMXZgZrhHmHHxINi1WakAATnZQjl5magQ12GBMToCIVDHCkmnQMGwAYqyIQ
- BZiOpB4ABgQDEGuVIm4GRLyBtQwEEk0/XgUYDQLExHXBER1cUBsG1DgNGAbNO1tcH0EDDAwG5c0B
- DkzpMhASAxsEBBsDEj31XpQ4kWJFi4AhAAAh+QQJCgAfACwAAAAAGAASAAAF3OAnftQBKZKkQAc1
- vvC3QEjCNA1XINASw4fKQ+ApegQNw6By+IkyCI7nQq0eMRtE5teJJKYXQFXsST4iLoBadEAIxvCL
- AMOQHAATDUYN+cbDVGUMA2p5GBoAFgZggFRiF2UGeHh6iBINjFWakQAYE3h5AJeZmoENDAGdExOH
- ABUMb6WacwwbCp2tHxAFmI+lHgAGBAMQH2oAbAgGRL6BnQwEdjFdBRgNAsfHdMMRHT9QGwbWOA0Y
- BtA7W05BAwwMBufQAQ5MTiMzEgMbBAQbAxI97L0ocSLFihYCQwAAIfkECQoAHwAsAAAAABoAEgAA
- BeHgJ37UASmSpEAHNb7wuEBIwjQNVyDQEv+HykPgKXoEDcOgcvi9MgiO50KtHjEbRMb56UQS0wug
- OvYkHxGXCMAWHRACsvwiwDAkzfVEw4aA52JUZgwDEGwAexh8FgZhgVRjF2YGGwqIiBqKABINjlWf
- kwEIiIl8H5yen4INDKIAGBMTmh8VDHGqn3UMlR+vsx8QBZ2Rqh4ABgSFa21uCAZExIKvDAR4Tl4F
- GA0Ch4d2yREdXFAbBto4DRgG1DtbXB9BAwwMBuvUAQ5M7zIQEgMbBAhsGCChx74XJU6kWNHiYAgA
- IfkEBQoAHwAsAAAAABgAEgAABdzgJ37UASmSpEAHNb7wt0BIwjQNVyDQEsOHykPgKXoEDcOgcviJ
- MgiO50KtHjEbRObXiSSmF0BV7Ek+Ii6AWnRACMbwiwDDkBwAEw1GDfnGw1RlDANqeRgaABYGYIBU
- YhdlBnh4eogSDYxVmpEAGBN4eQCXmZqBDQwBnRMThwAVDG+lmnMMGwqdrR8QBZiPpR4ABgQDEB9q
- AGwIBkS+gZ0MBHYxXQUYDQLHx3TDER0/UBsG1jgNGAbQO1tOQQMMDAbn0AEOTE4jMxIDGwQEGwMS
- Pey9KHEixYoWAkMAACH+Km1hZGUgYnkgZGFtaWFuIGthbmcgYWthIGg0aGFtc3RlciBmb3IgaXBi
- AAA7".$eol.$eol;
- # Hier beginnt die zweite Grafik
- $filename = "ßäöü.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary3.$eol;
- $body .= "Content-Type: image/gif;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: inline;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-ID: <image2>".$eol.$eol;
- $body .= "R0lGODlhJAASAMQVAAAAAEIxEGNSEHNjMXtjOZxjAJxzCJycY6WUe6Wce7WMCM6cCNalCN61EOe9
- EO/GEPfOGPfWGP/eGP/nIf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F
- VFNDQVBFMi4wAwEAAAAh+QQJDwAVACwAAAAAJAASAAAF/mAljmSZEIJAJGXbJsLgVoigNJDDKAIy
- Dz2S4KE4tAYGSCQyWUIaBlnpoHAISAbH4ypcTL7gZo5XGjoM2IejOKIyA/AJPDB5GowiqhY9GuCs
- IwIQcmFgAREODVwVQ09SFQlADo40CkyFYRF2Pn45Kj4JBlAKEBBGBA2YhZoNCwQVB6UKogYwRAYC
- E1uMDnJ0qnAOC1eCEwIGVSk4EEkQr0MRARRz1NIBwlcEpc2KA0AppdkN0RTl5ucBDQrPSikxQIMT
- sxOvCKTk5+bXCwY+BBPIxAiAYQDXAGciBIzDh+5BKy4EIgApGMQMwFd5qiypFsDhggJ4KhAwMEEL
- FxgpL0ImvPGgVCkHiRaQIXHAnY8ZJEY22Nkg5sdHOIOOqIGMwQ5cN4UqHXEiBYGkSkMAACH5BAkP
- ABUALAAAAAAkABIAAAX+YCWOZJkQgkAkZTkISCuLiKA0kMMosHwoDgEpIRjIBgZIJDJZQhoGY0nw
- cBhIVMVhuph4v80cj/RzPK4jg1k4+jED8Ak8MHkatiLqUyoyVLUjAhByYF8BEQ4NbAM4QQQxIow5
- bAgKTIVgEXYxBxAQCgZQLAkvDnsVBA2YhZoNCwQVghMCBkACCaG1nlsCDnJ0q3AOC0IEnklPKQ+g
- AhMPQlQRARRz1dMBw9BKKUUvOBDIsKnSFOXm5wENCuITtWHd3J5ClUrT5+bYCwYxBBEvBgZgyJoA
- agKsWA2W2EP3wBUbVAYmrKlABGARCAfLKLTWcEEBPCIOcINExZeBg3ksbjzw5MlBogVjZowgkgLk
- CAKhGuh86ZGPzJ8jatRisCMgJKBIZ6JQcRRpCAAAIfkECQ8AFQAsAAAAACQAEgAABf5gJY5kmRCC
- QCRl2ybC4FaIoDSQwygCMg89kuChOLQGBkgkMllCGgZZ6aBwCEgGx+MqXEy+4GaOVxo6DNiHozii
- MgPwCTwweRqMIqoWPRrgrCMCEHJhYAERDg1cFUNPUhUJQA6ONApMhWERdj5+OSo+CQZQChAQRgQN
- mIWaDQsEFQelCqIGMEQGAhNbjA5ydKpwDgtXghMCBlUpOBBJEK9DEQEUc9TSAcJXBKXNigNAKaXZ
- DdEU5ebnAQ0Kz0opMUCDE7MTrwik5Ofm1wsGPgQTyMQIgGEA1wBnIgSMw4fuQSsuBCIAKRjEDMBX
- eaosqRbA4YICeCoQMDBBCxcYKS9CJrzxoFQpB4kWkCFxwJ2PGSRGNtjZIObHRziDjqiBjMEOXDeF
- Kh1xIgWBpEpDAAAh+QQFDwAVACwAAAAAJAASAAAF/mBVJcIgnuhICAKRpDAsPMoRI4LSQA6jCIiY
- 0OB4CGADAyQSmTAhDYMJCUQZHo4aSrCYeL9O3i91UDiOp8HufCo3A/AJPDCBGmynmcNwSgwEDlBT
- AhByYF8BEQ4NaBVlRXwjBlEKEBA2CApNh2ARdkEVM4IiMwoGAhNGFQQNnIeeDQsEFWo8LUECOxBK
- ELOAcnSucA4LRweWplF+fyyWRzMRARRz1NIBxM+FAgZmzV6mE7Os0RTl5ucBDQrilryMJAanA70V
- mUvS5+bXCwa4SywlTOiZYGAWqQZM8KF7EAsNAYIKwhwhwQKPiEcJqzFcUAAPgQh/4lURQkrHA0uW
- LRwsWjDmBAEDE4o0IrlqUoObKzlOQXEAICiaInBwY+Dj1E+gSEUkWHErqYgQAAA7".$eol.$eol;
- # Hier endet der HTML-mit-Grafiken-Teil
- $body .= "--".$boundary3."--".$eol.$eol;
- # Hier endet der Nur-Text- plus HTML-Teil
- $body .= "--".$boundary2."--".$eol.$eol;
- # Hier beginnt der erste Anhang
- $filename = "ÄÜÖ.gif";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "R0lGODlhDwAPALMOAP/qAEVFRQAAAP/OAP8AAP/JAP+0AP6dAP/9E//+k///x///6zMzM//l
- AAAAAAAAACH5BAEAAA4ALAAAAAAPAA8AAARd0EkZap3Y1aVSGhcWcAgCnMMRTEEnCCfwpquW
- mHEOagoOn7+CKnADxoKGSiLHBBSSAROjCWA8KwPZa7sVrgJZAWE8FhR2msGgESAHziqWutB+
- 0zIVg94wzLAsNRMRADs=".$eol.$eol;
- # Hier beginnt der zweite Anhang
- $filename = "äöüß.rtf";
- $filename = mb_encode_mimeheader($filename, "UTF-8", "B");
- $body .= "--".$boundary1.$eol;
- $body .= "Content-Type: application/octet-stream;".$eol;
- $body .= " name=\"".$filename."\"".$eol;
- $body .= "Content-Transfer-Encoding: base64".$eol;
- $body .= "Content-Disposition: attachment;".$eol;
- $body .= " filename=\"".$filename."\"".$eol.$eol;
- $body .= "e1xydGYxXGFuc2lcZGVmZjNcYWRlZmxhbmcxMDI1CntcZm9udHRibHtcZjBcZnJvbWFuXGZwcnEy
- XGZjaGFyc2V0MCBUaW1lcyBOZXcgUm9tYW47fXtcZjFcZnJvbWFuXGZwcnEyXGZjaGFyc2V0MiBT
- eW1ib2w7fXtcZjJcZnN3aXNzXGZwcnEyXGZjaGFyc2V0MCBBcmlhbDt9e1xmM1xmcm9tYW5cZnBy
- cTJcZmNoYXJzZXQwIFRpbWVzIE5ldyBSb21hbjt9e1xmNFxmc3dpc3NcZnBycTJcZmNoYXJzZXQw
- IEFyaWFsO317XGY1XGZzd2lzc1xmcHJxMlxmY2hhcnNldDEgRGVqYVZ1IFNhbnM7fXtcZjZcZm5p
- bFxmcHJxMlxmY2hhcnNldDAgQXJpYWwgVW5pY29kZSBNUzt9e1xmN1xmbmlsXGZwcnEyXGZjaGFy
- c2V0MCBGcmVlU2Fuczt9e1xmOFxmc3dpc3NcZnBycTBcZmNoYXJzZXQxIEZyZWVTYW5zO319Cntc
- Y29sb3J0Ymw7XHJlZDBcZ3JlZW4wXGJsdWUwO1xyZWQxMjhcZ3JlZW4xMjhcYmx1ZTEyODt9Cntc
- c3R5bGVzaGVldHtcczBcc25leHQwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlwaGxlYWQyXGh5
- cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUyMDUyXGRiY2hc
- YWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzEgTm9ybWFsO30Ke1xzMTVc
- c2Jhc2Vkb24wXHNuZXh0MTZcc2IyNDBcc2ExMjBca2VlcG5cZGJjaFxhZjZcZGJjaFxhZjdcYWZz
- MjhcbG9jaFxmNFxmczI4IFx1MjIwXCdkY2JlcnNjaHJpZnQ7fQp7XHMxNlxzYmFzZWRvbjBcc25l
- eHQxNlxzYjBcc2ExMjAgVGV4dGtcdTI0NlwnZjZycGVyO30Ke1xzMTdcc2Jhc2Vkb24xNlxzbmV4
- dDE3XHNiMFxzYTEyMFxkYmNoXGFmOCBMaXN0ZTt9CntcczE4XHNiYXNlZG9uMFxzbmV4dDE4XHNi
- MTIwXHNhMTIwXG5vbGluZVxpXGRiY2hcYWY4XGFmczI0XGFpXGZzMjQgQmVzY2hyaWZ0dW5nO30K
- e1xzMTlcc2Jhc2Vkb24wXHNuZXh0MTlcbm9saW5lXGRiY2hcYWY4IFZlcnplaWNobmlzO30KfXtc
- aW5mb3tcYXV0aG9yIEhvbGdlciBLb2NofXtcY3JlYXRpbVx5cjIwMTRcbW8xMFxkeTIzXGhyMTBc
- bWluMjZ9e1xyZXZ0aW1ceXIwXG1vMFxkeTBcaHIwXG1pbjB9e1xwcmludGltXHlyMFxtbzBcZHkw
- XGhyMFxtaW4wfXtcY29tbWVudCBMaWJyZU9mZmljZX17XHZlcm42NzE3NTE3MH19XGRlZnRhYjcw
- OQpcdmlld3NjYWxlNjkKe1wqXHBnZHNjdGJsCntccGdkc2MwXHBnZHNjdXNlNDUxXHBnd3N4bjEx
- OTA2XHBnaHN4bjE2ODM4XG1hcmdsc3huMTEzNFxtYXJncnN4bjExMzRcbWFyZ3RzeG4xMTM0XG1h
- cmdic3huMTEzNFxwZ2RzY254dDAgU3RhbmRhcmQ7fX0KXGZvcm1zaGFkZVxwYXBlcmgxNjgzOFxw
- YXBlcncxMTkwNlxtYXJnbDExMzRcbWFyZ3IxMTM0XG1hcmd0MTEzNFxtYXJnYjExMzRcc2VjdGRc
- c2Jrbm9uZVxzZWN0dW5sb2NrZWQxXHBnbmRlY1xwZ3dzeG4xMTkwNlxwZ2hzeG4xNjgzOFxtYXJn
- bHN4bjExMzRcbWFyZ3JzeG4xMTM0XG1hcmd0c3huMTEzNFxtYXJnYnN4bjExMzRcZnRuYmpcZnRu
- c3RhcnQxXGZ0bnJzdGNvbnRcZnRubmFyXGFlbmRkb2NcYWZ0bnJzdGNvbnRcYWZ0bnN0YXJ0MVxh
- ZnRubnJsYwpccGduZGVjXHBhcmRccGxhaW4gXHMwXG5vd2lkY3RscGFye1wqXGh5cGhlbjJcaHlw
- aGxlYWQyXGh5cGh0cmFpbDJcaHlwaG1heDB9XGNmMFxrZXJuaW5nMVxkYmNoXGFmNlxsYW5nZmUy
- MDUyXGRiY2hcYWY3XGFmczI0XGFsYW5nMTA4MVxsb2NoXGYzXGZzMjRcbGFuZzEwMzF7XHJ0bGNo
- IFxsdHJjaFxsb2NoXGxvY2hcZjUKTnVyIGVpbiBUZXN0Li4ufQpccGFyIH0=".$eol.$eol;
- # Hier endet der Mail-Body
- $body .= "--".$boundary1."--";
- $from_name = "Käthe Müller";
- $from_email_address = "kaethe@example.org";
- $to_name = "Hans Meyer";
- $to_email_address = "hans@example.org";
- $header = "MIME-Version: 1.0".$eol;
- $header .= "Content-Type: multipart/mixed;".$eol;
- $header .= " boundary=\"".$boundary1."\"".$eol;
- $header .= "Content-Transfer-Encoding: 8bit".$eol;
- $header .= "From: ".mb_encode_mimeheader($from_name, "UTF-8", "Q")." <".mb_encode_mimeheader($from_email_address, "UTF-8", "Q").">";
- if (PHP_OS == "Linux") $to = mb_encode_mimeheader($to_name, "UTF-8", "Q")." <".mb_encode_mimeheader($to_email_address, "UTF-8", "Q").">"; else $to = mb_encode_mimeheader($to_email_address, "UTF-8", "Q");
- if (mb_send_mail($to, $subject, $body, $header)) echo "Die Mail wurde verschickt.";
- else echo "Die Mail konnte nicht verschickt werden!";
- ?>
MIME-Typ ermitteln
Folgende Funktion ermittelt den MIME-Typ einer Datei, um diesen String im Mail-Quelltext zu verwenden:
- function getmime($file) {
- # returns mime type string for file
- $finfo = finfo_open(FILEINFO_MIME_TYPE);
- $mime = finfo_file($finfo, $file);
- finfo_close($finfo);
- return $mime;
- }
E-Mails an mehrere Empfänger
Um eine E-Mail an mehrere Empfänger zu verschicken, gibt es zwei Möglichkeiten. Einerseits kann man den ersten Parameter der mb_send_mail()-Funktion ($to) um weitere, durch Komma getrennte Adressen ergänzen:
$to = "kontakt@example.org, mail@example.org, info@example.org";
Andererseits kann man im vierten Parameter ($header) noch Empfänger angeben, die eine Kopie der Mail erhalten sollen (Cc bzw. Bcc). In diesem Fall muss den Angaben ein Zeilenumbruch vorangestellt werden:
$header .= PHP_EOL."Cc: mail@example.org, kontakt@example.org";
$header .= PHP_EOL."Bcc: info@example.org, lisa@example.org";