# PHP Mail-Skript Fehler bei Umlauten



## vianne (29. April 2008)

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


----------



## BillaBong (29. April 2008)

```
<?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


----------



## vianne (29. April 2008)

_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 ... *

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

*LG Vianne*


----------



## SCIPIO-AEMILIANUS (29. April 2008)

Das geht mit str_replace.

Beispiel: 
	
	
	



```
$ausgabe=str_replace("Ä","&Auml;",$orginal);
```


----------



## vianne (30. April 2008)

Hallo nochmal und schonmal Danke für Eure Hilfe.
Aber mein Skript funktioniert leider immer noch nicht  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


----------



## suntrop (30. April 2008)

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:

```
"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.


----------



## vianne (30. April 2008)

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


----------



## Loomis (30. April 2008)

Wie wird denn das Formular selber kodiert?
Also hier:

```
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
```
Es sollte immer alles gleich kodiert sein.

// edit: Was zum lesen:
http://www.paefken.westfalen.de/de.newusers/umlaute-faq.txt (Punkt 3)


----------



## suntrop (30. April 2008)

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


----------



## vianne (2. Juni 2008)

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 ....


----------



## Loomis (2. Juni 2008)

Um eine einzige Email-Adresse zu "verbieten" könnte man sowas schreiben:

```
if( $email != 'devnull@kundenserver.de' )
{
    mail($an,$betreff,$bodytext,$headers);
}
```
Allerdings sollte man sich schon mehr gedanken um Spamschutz machen. Link


----------



## vianne (2. Juni 2008)

Da hast Du Recht bzgl. des Spamschutzes. Nochmals danke für den weiteren Tipp!
Und den Link werde ich mir mal unter die Lupe nehmen und schauen was man noch alles bzgl. Spam berücksichtigen sollte.

Danke und bis denn

vianne


----------

