Skip to content

E-Mail versenden mit PHP (UTF-8 / HTML / mit Anhang)

von dennis

Hier eine kleine PHP-Funktion, die genau das kann:

function utf8_html_mail($email_from,$email_to,$email_subject, $email_body, $attach = array()) {
	Beispiel für den Aufbau von $attach:
	$attach = array(
		0=> array(
			'filename' => 'mailer.php',
			'filetype' => 'text/plain',
			'data' 	   => file_get_contents('mailer.php'),
	$header = "From: ".$email_from."\n";
	$header.= "Reply-To: ".$email_from."\n";
	$header.= "Return-Path: ".$email_from." \n";
	$header.= "X-Mailer: PHP/" . phpversion() . "\n";
	$header.= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR']. "\n";
	if (empty($attach)) {
		$header.= "Content-type: text/html;charset=utf-8\n";
		$header.= "Content-Transfer-Encoding: base64\n\n";
		$email_body = chunk_split(base64_encode($email_body));
	} else {
		$boundary = 'x'.md5(uniqid(time())).'x';
		$header.= "MIME-Version: 1.0\n";
		$header.= "Content-Type: multipart/mixed; boundary=".$boundary."\n\n";
		$header.= "This is a multi-part message in MIME format\n";
		$header.= "--".$boundary."\n";
		$header.= "Content-type: text/html;charset=utf-8\n";
		$header.= "Content-Transfer-Encoding: base64\n\n";
		$header.= chunk_split(base64_encode($email_body));
		foreach($attach as $akt) {
			$header.= "\n--".$boundary."\n";
			$header.= "Content-Type: ".$akt['filetype']."; name=".$akt['filename']."\n";
			$header.= "Content-Transfer-Encoding: base64\n";
			$header.= "Content-Disposition: attachment; filename=".$akt['filename']."\n\n";
			$header.= chunk_split(base64_encode($akt['data']));
		$header.= "\n--".$boundary."--";
		$email_body = '';
	return @mail($email_to, "=?UTF-8?B?".base64_encode($email_subject)."?=", $email_body, $header, '-f '.$email_from);

Aufruf erfolgt dann z.B. so:

$attach = array(
	0 => array(
		'filename' => 'file1.txt',
		'filetype' => 'text/plain',
		'data' 	   => 'Hier steht der Inhalt von Datei 1',
	1 => array(
		'filename' => 'file2.txt',
		'filetype' => 'text/plain',
		'data' 	   => 'Hier steht der Inhalt von Datei 2',
if (utf8_html_mail('','', 'Hier steht der Betreff', 'Das hier ist der <strong>E-Mail</strong>-Body', $attach)) {
	echo 'okay';
} else {
	echo 'fehler';

Das Array $attach ist optional und kann auch einfach weggelassen werden.

Einfache E-Mails mit PHP versenden siehe hier

Aus → PHP

No comments yet

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS