• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP mail() und Umlaute

lucarp

Mitglied
Hallo,

ich verschicke Mails mit der PHP Funktion mail() und möchte nun auch endlich das Umlautproblem in den griff bekommen.

die Website ist in UTF-8 kodiert und somit kommen die Umlaute bei einigen Empfängern kaputt an.

nun dachte ich, sollte es klappen, wenn der Mailheader die entsprechenden Informationen zum Zeichensatz enthält

Code:
$to = 'Vorname Nachname <Emailadresse>';
$subject = "Betreff";
$message = "Nachricht";
$headers = "Return-Path: [email protected]". "\n";
$headers .= "MIME-Version: 1.0" . "\n";
$headers .= "Content-type:text/plain;charset=ISO-8859-1" . "\n";
$headers .= "Content-Transfer-Encoding: quoted-printable" . "\n";
$headers .= 'From: Firma X<[email protected]>' . "\n";


mail($to,$subject,$message,$headers);
leider klappt das nicht.

ich habe testweise probiert die Inhalte mit utf8_decode() zu behandeln, was auch klappt.
ich verstehe es nur nicht.

Ein weiteres Problem ist, dass Worte im Absender- oder Empfängername die Umlaute enthalten z.B. bei gmx.net in Anführungszeichen angezeigt werden z.B. "Rüdiger" Test <r.test@@domain.tld>.

Warum? und wie kann man das umgehen?

Danke
 
Werbung:
Du gibst im Header der E-Mail

Code:
Content-type:text/plain;charset=ISO-8859-1

an, folglich musst Du auch die Inhalte in iso-8859-1 auszeichnen. Wenn Du utf-8 in der Mail nutzen willst ändere diese Angabe in

Code:
$headers .= "Content-type:text/plain;charset=utf-8" . "\n";

Umlaute in Absendernamen müssen ebenfalls so kodiert werden wie es beim Content-type angegeben ist. Dafür gibt es jedoch eine spezielle Schreibweise da man hier nur US-ASCII-Zeichen verwenden darf. Beispiel:

PHP:
$from = sprintf('=?UTF-8?Q?%s <%s>', imap_8bit($name), $email);

PHP: imap_8bit - Manual
 
Werbung:
Danke für die Antworten,

Damit bin ich schonmal so weit gekommen wie bis jetzt noch nicht :-)

eine Verständnissfrage hätte ich zu

Code:
[COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#DD0000]=?UTF-8?Q?%s <%s>[/COLOR][COLOR=#007700][/COLOR][/COLOR]

für was steht dieses ?Q?

Im Beispiel von Commodore steht an dieser stelle ein ?B?
 
Wenn Du genau hinschaust gibt es noch einen anderen Unterschied. Bei MIME-B (also ?B?) wird der Text dahinter base64-kodiert angegeben. Bei MIME-Q (q für quoted-printable) wird der Text dahinter quoted-printable eingetragen. Welche Variante Du nimmst, ist dir überlassen.
 
ah okay.
das macht Sinn.

Also der Stand der Dinge ist jetzt, dass ich alles soweit hinbekommen habe, dass auch im Webmail von gmx.net alles korrekt angezeigt wird.
Jetzt wird allerdings bei web.de der Absender und Empfänger folgend anzgezeigt
Code:
=?UTF-8?Q?.....?=

kann man es allen recht machen?

Ich habe dem Header noch

Code:
Content-Transfer-Encoding: quoted-printable

hinzugefügt, was allerdings nichts ändert
 
Werbung:
Schau dir mal den Quellcode der E-Mail haargenau an. Der wäre für eine Analyse interessant. Ggfs. verhält sich web.de bei sowas aber auch falsch, was ich erstmal nicht vermuten würde.
 
Also ich habe jetzt folgendes bemerkt.

Bei web.de kommen die Absende und Empfängernamen mit base64_encode() richtig an
bei gmx.de und den meisten anderen mit imap_8bit()

ich habe deshlab folgende abfrage gemacht, was aber leider nicht funktioniert.
Damit kommen bei web.de alle richtig an und bei allen anderen dafür das chaos :-)

PHP:
$mail_domain = explode("@",$tomail);

  if($mail_domain[1] == "web.de")
      {
       $mailto = '=?UTF-8?B?' . base64_encode($toname) . '?=<' . $tomail . '>';  
         $mailfrom = '=?UTF-8?B?' . base64_encode($fromname) . '?=<' . $frommail . '>' . "\r\n"; 
    }
    else
    {
        $mailto = '=?UTF-8?Q?' . imap_8bit($toname) . '?=<' . $tomail . '>';  
          $mailfrom = '=?UTF-8?Q?' . imap_8bit($fromname) . '?=<' . $frommail . '>' . "\r\n"; 
    }
 
Interessant. Mit so einer unterschiedlichen Unterstützung bei WebMailern hätte ich nicht gerechnet. Danke für die Rückmeldung.
 
Werbung:
Zurück
Oben