Sendmail mit §_POST - Umlaute vermeiden
Michael P.
- php
0 dedlfix
Hallo,
vll. kann mir von Euch jemand helfen!
Das Mailformular generiert bei Eingabe von Text mit Umlauten leicht kryptische Mails.
<?php
$strEmpfaenger = 'emailempfaenger';
$strFrom = '"SENDMAIL" <emailabsender>';
$strSubject = 'emailbetreff';
$strReturnhtml = 'urlweiterleitung';
$strDelimiter = ":\t";
if($_POST)
{
$strMailtext = "";
while(list($strName,$value) = each($_POST))
{
if(is_array($value))
{
foreach($value as $value_array)
{
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else
{
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc())
{
$strMailtext = stripslashes($strMailtext);
}
mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
}
?>
Wenn ins Formular Daten eingegeben werden kommt z. B. folgende Mail:
From: "SENDMAIL" <emailabsender>
To: <emailempfaenger>
Sent: Thursday, January 10, 2008 4:03 PM
Subject: emailbetreff
Name: testname
Strasse: teststr.
Ort: PLZ Oberkrämer
E-Mail: emailaddy
Telefon: telnr
Kinder: 3 (3-2-7)
Zeit: 03.02.-08.08.2008 (evtl. bis 4.10.)
Nachricht: Vielen Dank für alles.
Wir freuen uns auf die Zeit.
Bitte um Bestätigung.
GrüÃYe - Name
kontakt: email
Wie kann ich das ganze lösen und die kryptischen Zeichen durch die richtigen Umlaute ersetzen!?
Bitte um HIlfe.
echo $begrüßung;
Das Mailformular generiert bei Eingabe von Text mit Umlauten leicht kryptische Mails.
Das ist daran nicht schuld. Es ist auch nicht kryptisch, nur falsch interpretiert.
From: "SENDMAIL" <emailabsender>
To: <emailempfaenger>
Sent: Thursday, January 10, 2008 4:03 PM
Subject: emailbetreff
Hier ist keine Angabe enthalten, in welcher Kodierung die Maildaten vorliegen.
Ort: PLZ Oberkrämer
Es scheint so, dass deine Seite UTF-8-kodiert ist.
Wie kann ich das ganze lösen und die kryptischen Zeichen durch die richtigen Umlaute ersetzen!?
Die kryptischen Zeichen sind richtige Umlaute, nur gemäß UTF-8 kodiert. Du kannst deine Seite umstellen, was sicher nicht die beste Idee ist. Sie nach ISO-8859-1 umzuwandeln auch nicht unbedingt, weil dir dabei Zeichen verlorengehen können, die nicht in ISO-8859-1 enthalten sind. Wenn du der Mail einen Content-Type-Header spendierst, sollte der Empfänger die Byte-Sequenzen korrekt interpretieren.
Content-Type: text/plain;charset=UTF-8
Gegebenendalls sind noch weitere Besonderheiten beim Erstellen einer Mail zu beachten, doch moderne Mail-Clients sollte auch so schon zurecht kommen.
echo "$verabschiedung $name";
Es scheint so, dass deine Seite UTF-8-kodiert ist.
ja genau!
Content-Type: text/plain;charset=UTF-8
wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/
vielen dank für deine hilfe!!
echo $begrüßung;
Content-Type: text/plain;charset=UTF-8
wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/
$strFrom = '"SENDMAIL" <emailabsender>' . "\nContent-Type: text/plain;charset=UTF-8";
echo "$verabschiedung $name";
Moin!
echo $begrüßung;
Content-Type: text/plain;charset=UTF-8
wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/$strFrom = '"SENDMAIL" <emailabsender>' . "\nContent-Type: text/plain;charset=UTF-8";
Hinzuzufügen ist noch, dass diese Content-Type-Angabe nur für den Body der Mail gilt, nicht jedoch für die Header. Doch dummerweise ist üblicherweise das Subject sowie Namensangaben von Empfänger oder Sender auch gerne von UTF-8-Datentum betroffen.
Es gibt für Header eine spezielle Codierungsmethode, damit das leider auf 7 Bit ausgelegte Mailsystem mit 8-Bit-Zeichen und schlimmerem zurechtkommt.
Wenn ein String für den Mailheader als korrektes UTF-8 vorliegt, hilft diese Funktion:
function _encode_header($header)
{
return "=?utf-8?b?".base64_encode($header)."?=";
}
Wichtig: Der Headerbezeichner (wie "Subject:", "To:", "Cc:" etc.) darf nicht mit bearbeitet werden. Der muß im Klartext bleiben, damit die Mailserver erkennen, was da eigentlich codiert wird.
- Sven Rautenberg