PHP Mail mit Umlauten

Alexio Vay

Grünschnabel
Hallo,

ich lasse Mitarbeiter per Textfeld Mails an bestimmte User bzw. E-Mail-Adressen versenden.

Das Problem ist, dass E-Mails bei meinem Mail-Hoster z.B. im Posteingang so dargestellt werden, dass die Umlaute so "ü", usw. angezeigt werden.
Jedoch wird in Mail-Programmen wie Thunderbird z.B. alles korrekt dargestellt. Es handelt sich um HTML-Mails. Und nur der Input-Text wird auf gmx.de zum Beispiel falsch dargestellt, jedoch nicht der Rest der Mail. Auch im iPhone wird die Mail korrekt mit Umlauten dargestellt.

Jetzt hatte ich probiert das mit htmlentities zu lösen, aber das klappte auch nicht.

Weiß jemand Rat?

LG
 
Falsches bzw. nicht angeführter Charset. Mozilla prüft das Encoding bevor es dargestellt wird, von daher geht es. GMX tut es nicht und fällt dann auf den default zurück.
 
Aber sowohl auf der Page, wo das Textfeld ist für den individuellen Mail-Text als auch die Mail selbst wird mit UTF8 versendet. Und Text, der nicht ins Textfeld eingegeben wurde, ist ja auch nicht davon betroffen. Deshalb wundert mich das.
 
PHP:
<?PHP  
require_once("MIMEMailxPHP4_V2.inc");
$mail = new MIMEMailxPHP4_V2();
$mail->setHTMLContent("<p>HTML UMLAUTE: &Auml;&Ouml;&Uuml;&szlig;</p>");
$mail->setFromHeader("ABSENDER <post@absender.de>");
$mail->setRecievers('post@eampfaenger.de');
$mail->setSubject("BETREFF");
$mail->setEOL("\r\n");
$rc = $mail->sendMail();
?>
Probiers dochmal mit einer Klasse wie z. B. diese: http://www.feike.biz/php_mime_mail_de.html.
 
PHP:
$header .= "Reply-To: ABC <info@abc.de>\r\n"; 
$header .= "Return-Path: ABC <info@abc.de>\r\n"; 
$header .= "From: ABC <info@abc.de>\r\n";
$header .= "Organization: ABC\r\n"; 
$header .= "X-Mailer: PHP/" . phpversion() . "\r\n"; 
$header .= "X-Sender-IP: " . $REMOTE_ADDR . "\r\n"; 
$header .= "Content-type: text/html\r\n";
						
mail($adress,$title,$text,$header);

Das ganze ist eine Funktion und je nachdem, was verlangt wird, wird ein anderer Text versendet. Jedenfalls steht am Anfang jeder Mail:

PHP:
$text = 
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de' lang='de'>
<head>
<style type='text/css'>
body {font-family:'Trebuchet MS'; font-size:0.9em}
a {color:#86B02D}
#footer {color:#888; font-size:0.5em}
#footer a {color:#999}
</style>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
</head>
<body>
<a href='http://www.abc.de'><img src='https://www.abc.de/img/head.png' width='195' height='60' alt='abc' /></a>
<div style='float:right; color:#999; font-size:12px'>".date("d.m.Y")."</div>
<br /><br />
 
Versuch mal, den Header so zu bauen, das der Mail-Client (im Zweifelsfalle auch der Webbrowser bei Webmailern) den richtigen Content-Type mit Encoding gesendet bekommt:

PHP:
$header .= "Content-type: text/html; charset=utf-8\r\n";

Dann solltest du normalerweise auch Umlaute als reguläre Zeichen senden können und musst nicht vorher in HTML-Entitäten umwandeln.

Außerdem fehlt für HTML-Mails noch die obligatorische MIME-Angabe. Am besten, du liest die Erklärung der Mail-Funktion im Manual noch mal aufmerksam durch: http://php.net/manual/de/function.mail.php (insbesondere Beispiel #4 Verschicken einer HTML-E-Mail.)
 
Zurück