PHP Mail-Skript Fehler bei Umlauten

vianne

Grünschnabel
Hallo alle PHP-Cracks :),

ich benötige dringend Hilfe bzgl. eines PHP Mail-Skriptes, welches Umlaute und Sonderzeichen komplett zerschießt. Die Seiten liegen bei 1&1.

Das Script sieht wie folgt aus:

<?PHP
$von = "From:info@mailadresse.de";
$betreff = "Ankaufanfrage aus dem Web";
$bodytext = "Es gab eine Ankaufanfrage auf der Homepage:\n\n";
$bodytext=$bodytext."Hersteller: ".$hersteller."\n";
$bodytext=$bodytext."Modell: ".$modell."\n";
$bodytext=$bodytext."Baujahr: ".$baujahr."\n";
$bodytext=$bodytext."Laufleistung: ".$laufleistung."\n";
$bodytext=$bodytext."Farbe: ".$farbe."\n";
$bodytext=$bodytext."Preisvorstellung: ".$preisvorstellung."\n";
$bodytext=$bodytext."Vorname: ".$vorname."\n";
$bodytext=$bodytext."Nachname: ".$nachname."\n";
$bodytext=$bodytext."E-Mail: ".$email."\n\n";
$bodytext=$bodytext."Telefon: ".$tel."\n";
$bodytext=$bodytext."\n\n";
$bodytext=$bodytext."Text:\n".$textfeld."\n";
$bodytext=$bodytext."\n\n";
$bodytext=$bodytext."Diese Nachricht wurde automatisch generiert";
$an = "info@mailadresse.de";
$headers=$von."\n"
. "Content-Type: text/plain; charset=iso-8859-1\n"
. "MIME-Version: 1.0\n"
. "Content-Transfer-Encoding: quoted-printable\n";
mail($an,$betreff,$bodytext,$headers);

$url = "emailok.php";
$action = "<META HTTP-EQUIV='refresh' content='1; URL=$url'> ";
echo $action;
?>
----------------------------

Was ist bloß daran falsch, denn bei der Bestätigungsmail kommt dann sowas an:

Text:
VW T4 Multivan / Comfortline, Navi, 2.5 TDI, Sonder-Kfz Sehr gepflegter Multivan aus 2. Hand, Comfortlineausstattung, Tieferlegung, Navi, i-Pod Anschluss, Klimaautomatik, Küchenblock mit Spül und Kochgelegenheit, Kühlbox, zusätzlicher Einzelsitz vorhanden (kann anstelle von Kühlbox oder Küchenblock installiert werden), Wohnmobilzulassung.
-----------------

Alle Sonderzeichen und Umlaute weren kryptisch dargestellt. Ich werde noch wahnsinnig weil ich schon so viel daran "rumgedoktort" habe.
Ich freue mich auf Eure Unterstützung.

Die PHP-Nullcheckerin Vianne :confused:
 
PHP:
<?php

$von = "From:info@mailadresse.de";
$betreff = "Ankaufanfrage aus dem Web";

$bodytext = "Es gab eine Ankaufanfrage auf der Homepage:\n\n";
$bodytext .="Hersteller: ".$hersteller."\n";
$bodytext .="Modell: ".$modell."\n";
$bodytext .="Baujahr: ".$baujahr."\n";
$bodytext .="Laufleistung: ".$laufleistung."\n";
$bodytext .="Farbe: ".$farbe."\n";
$bodytext .="Preisvorstellung: ".$preisvorstellung."\n";
$bodytext .="Vorname: ".$vorname."\n";
$bodytext .="Nachname: ".$nachname."\n";
$bodytext .="E-Mail: ".$email."\n\n";
$bodytext .="Telefon: ".$tel."\n";
$bodytext .="\n\n";
$bodytext .="Text:\n".$textfeld."\n";
$bodytext .="\n\n";
$bodytext .="Diese Nachricht wurde automatisch generiert";

$an = "info@mailadresse.de";
$headers=$von."\n"
. "Content-Type: text/plain; charset=iso-8859-1\n"
. "MIME-Version: 1.0\n"
. "Content-Transfer-Encoding: quoted-printable\n";
mail($an,$betreff,$bodytext,$headers);

$url = "emailok.php";
//$action = "<META HTTP-EQUIV='refresh' content='1; URL=$url'> ";
echo $action;
?>
Das Würde ich so machen.

So und zu deinen umlauten du musst schauen das du aus deinen variablen bei denen ein umlaut vorkommt das umlaut entfernst. Ein ü z.b. musst du durch ein &uuml; ersetzen. Suche mal nach "html umlaute" und nach "preg_match", "htmlspecialchars", "nl2br".

Wenn es dann immer noch net klappt kannste dich ja nochmal melden
 
So und zu deinen umlauten du musst schauen das du aus deinen variablen bei denen ein umlaut vorkommt das umlaut entfernst. Ein ü z.b. musst du durch ein &uuml; ersetzen. Suche mal nach "html umlaute" und nach "preg_match", "htmlspecialchars", "nl2br".
Wenn es dann immer noch net klappt kannste dich ja nochmal melden
***************

Also das Versenden klappt ja immer ohne Weiteres ... ich weiß einfach nicht woe ich das mit den Umlauten im Skript eingeben muss.
Es müsste halt öüä klein und groß € und ß ersetzt werden, quasi ja so:

Ä = &Auml;
ä = &auml;
Ö = &Ouml;
ö = &ouml;
Ü = &Uuml;
ü = &uuml;
ß = &szlig;
€ = &euro;

Aber ich weiß nicht wie ich das einbauen soll ... :confused:

HILFE! Ich weiß da echt nicht weiter.
Freu mich auf Eure Antworten.

LG Vianne
 
Hallo nochmal und schonmal Danke für Eure Hilfe.
Aber mein Skript funktioniert leider immer noch nicht :mad: trotz des guten Tipps:

Beispiel:
PHP:
---------
$ausgabe=str_replace("Ä","&Auml;",$orginal);

Ich habe jetzt das Skript mit "str_replace" wie folgt ergänzt:

<?php
$von = "From:From:info@mailadresse.de";
$betreff = "Ankaufanfrage aus dem Web";
$bodytext = "Es gab eine Ankaufanfrage auf der Homepage:\n\n";
$bodytext .="Hersteller: ".$hersteller."\n";
$bodytext .="Modell: ".$modell."\n";
$bodytext .="Baujahr: ".$baujahr."\n";
$bodytext .="Laufleistung: ".$laufleistung."\n";
$bodytext .="Farbe: ".$farbe."\n";
$bodytext .="Preisvorstellung: ".$preisvorstellung."\n";
$bodytext .="Vorname: ".$vorname."\n";
$bodytext .="Nachname: ".$nachname."\n";
$bodytext .="E-Mail: ".$email."\n\n";
$bodytext .="Telefon: ".$tel."\n";
$bodytext .="\n\n";
$bodytext .="Text:\n".$textfeld."\n";
$bodytext .="\n\n";
$bodytext .="Diese Nachricht wurde automatisch generiert";

// Falsche Umlautzeichen ersetzen
$trans = array("ä" => "ä", "Ä" => "Ä", "ü" => "ü", "Ãœ" => "Ü", "ö" => "ö", "Ö" => "Ö", "ß" => "ß" , "â‚" => "€");
$string = strtr($string, $trans);


$an = "info@mailadresse";
$headers=$von."\n"
. "Content-Type: text/plain; charset=iso-8859-1\n"
. "MIME-Version: 1.0\n"
. "Content-Transfer-Encoding: quoted-printable\n";
mail($an,$betreff,$bodytext,$headers);
$url = "emailok.php";
$action = "<META HTTP-EQUIV='refresh' content='1; URL=$url'> ";
echo $action;
?>
----------------------------------


Oder es gibt noch diese Variante:

// Falsche Umlautzeichen ersetzen
$ausgabe = str_replace ("ü", "ü", $ausgabe);
$ausgabe = str_replace ("Ãœ", "Ü", $ausgabe);
$ausgabe = str_replace ("ö", "ö", $ausgabe);
$ausgabe = str_replace ("Ö", "Ö", $ausgabe);
$ausgabe = str_replace ("ä", "ä", $ausgabe);
$ausgabe = str_replace ("Ä", "Ä", $ausgabe);
$ausgabe = str_replace ("ß", "ß", $ausgabe);

Aber weder das eine noch das andere funktioniert. Die Mails kommen immer an aber alle Umlaute sind weiterhin "zerschossen".
Ihc bin echt am verzweifeln. Was kann ich noch machen damit es nun endlich funktioniert?

LG Vianne
:confused:
 
Hallo vianne,

ich würde nicht mit HTML-Mails und strg_replace hantieren. Wenn dein Auto nicht mehr fährt, dann stellst du es doch auch nicht in einen LKW und fährst damit weiter, sondern reparierst es.

Kann es sein, dass du unter Linux oder Mac arbeitest?


Ändere mal deinen Zeichensatz von Latin-1 auf UTF-8:
PHP:
"Content-Type: text/plain; charset=utf-8\n"
Glaube zwar nicht, dass es UTF-8 ist, aber ein Test geht ja recht fix.

Wo kommen die Sonderzeichen falsch an? Web.de ist meist zickig im Umgang mit Sonderzeichen. Schlimmer ist noch ein altes Horde. Prüf auch mal bei GMail oder Yahoo bzw. in Thunderbird und Outlook.
 
Hallo suntrop,

Danke für deine Hilfe ... also es ist so .... das mit Latin-1 auf UTF-8: habe ich schon ausprobiert. Leider Fehlanzeige.

Ich bin PC-Nuter und der Kunde auch ... wir beide haben Outlook und wir beide bekommen in der Empfangsmail die zerschossenen Umlaute und Sonderzeichen. Das sieht dann so aus:

Text:
VW T4 Multivan / Comfortline, Navi, 2.5 TDI, Sonder-Kfz Sehr gepflegter Multivan aus 2. Hand, Comfortlineausstattung, Tieferlegung, Navi, i-Pod Anschluss, Klimaautomatik, Küchenblock mit Spül und Kochgelegenheit, Kühlbox, zusätzlicher Einzelsitz vorhanden (kann anstelle von Kühlbox oder Küchenblock installiert werden), Wohnmobilzulassung.

Interessiere mich für einen zum Wohnmobilausbau geeigneten, in gutem Zustand befindlichen T4 bis max. 10.000 €

Die Seiten des Kunden liegen bei 1&1 falls es wichtig sein sollte ...

Freue mich auf weitere Hilfe,

Grüße Vianne :rolleyes:
 
Das ist wirklich merkwürdig. Ich hatte mich auch oft mit ähnlichen Schwierigkeiten rumgeschlagen, nur weiß ich, dass es bei mir an der Umstellung zu UTF-8 lag.

Auch wenn es hier nicht UTF-8 ist, es lässt sich alles korrigieren.

Wenn das alles ist, was in der PHP-Datei steht, dann lad die originale Datei mal hier hoch. Mal sehen, ob das auch bei mir auftritt.


Der Provider sollte nichts damit zu tun haben, 1und1 jedenfalls nicht.


Grüße
suntrop
 
Hallo Loomes,

besser spät als nie ... sorry dass ich mich erst jetzt melde. Aber Dein Tipp hat mich gerettet Die Kodierungen waren unterschiedlich. Jetzt klappt es einwandfrei

Umzwar so:

<?php

$von = "From:From:mail@domainname.de";
$betreff = "Ankaufanfrage aus dem Web";

$bodytext = "Es gab eine Ankaufanfrage auf der Homepage:\n\n";
$bodytext .="Hersteller: ".$hersteller."\n";
$bodytext .="Modell: ".$modell."\n";
$bodytext .="Baujahr: ".$baujahr."\n";
$bodytext .="Laufleistung: ".$laufleistung."\n";
$bodytext .="Farbe: ".$farbe."\n";
$bodytext .="Preisvorstellung: ".$preisvorstellung."\n";
$bodytext .="Vorname: ".$vorname."\n";
$bodytext .="Nachname: ".$nachname."\n";
$bodytext .="E-Mail: ".$email."\n\n";
$bodytext .="Telefon: ".$tel."\n";
$bodytext .="\n\n";
$bodytext .="Text:\n".$textfeld."\n";
$bodytext .="\n\n";
$bodytext .="Diese Nachricht wurde automatisch generiert";


// Falsche Umlautzeichen ersetzen
$trans = array("ä" => "ä", "Ä" => "Ä", "ü" => "ü", "Ãœ" => "Ü", "ö" => "ö", "Ö" => "Ö", "ß" => "ß" , "â‚" => "€");
$string = strtr($string, $trans);


$an = "mail@domainname.de";
$headers=$von."\n"
. "Content-Type: text/plain; charset=iso-8859-1\n"
. "MIME-Version: 1.0\n"
. "Content-Transfer-Encoding: quoted-printable\n";

mail($an,$betreff,$bodytext,$headers);

$url = "emailok.php";
$action = "<META HTTP-EQUIV='refresh' content='1; URL=$url'> ";
echo $action;
?>
Und in HTML wie folgt:

<form action="mailform.php" method="post" accept-charset="iso-8859-1" style="">

Das einzige was jetzt manchmal kommt sind so komische Spamanfragen vom Server von 1&1 nehme ich an ... der Absender ist dann immer:

devnull@kundenserver.de
Aber das Fomular ist nicht ausgefüllt.

Falls Du da noch eine Lösung hast ... er das ist jetzt nur noch die Kür. So bin ich schon sehr zufrieden.

Vielen Dank für Deine Hilfe und bis zum nächsten mal ....
 
Zurück