# mail() und Umlaute bzw. Sonderzeichen



## Nummer2 (24. Oktober 2003)

Hi!

Ich habe beim Versenden von Mails mit dem PHP-Befehl mail() schon immer ein Problem, das anscheinend niemand anderes hat. Beispiel:


```
<?php

$betreff = "Testbetreff mit ß, ä, ö, ü und !?";

$body = "Testtext mit ß, ä, ö, ü und !?";

$headers = "Reply-To: niemand <niemand@nirgends.de>\n";
$headers .= "From: niemand <niemand@nirgends.de>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\n";
$headers .= "X-Priority: 1\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "X-Mailer: php\n";

mail("niemand@nirgends.de", $betreff, $body, $headers);

?>
```

Wenn ich auf diese Weise eine Mail versende, kommt der Betreff und der Bodytext immer mit falschen Sonderzeichen an, egal ob Mac oder PC. Das ü wird zum Komma und das ß wird zu einem Zeichen, das ich auf meiner Mac-Tastatur gar nicht reproduzieren kann etc. Ich habe schon alles ausprobiert: HTML-Kodierung funktioniert zwar für den Body, den Betreff rettet es aber nicht. Mit diversen Headern habe ich experimentiert – nix. Wenn ich den Betreff und den Bodytext als Variable per POST oder GET reinhole, klappt alles.

Vielleicht habe ich ja was ganz Simples übersehen, ich bin noch ziemlich grün, was PHP angeht. Oder hat mein Provider ne Macke? Helft mir bitte!

Ciao,
Nummer2


----------



## tefla (24. Oktober 2003)

ich würde sagen, das dein Provider auf dem Server nur einen Standardzeichensatz hat. Sprich der keine deutschen Umlaute und Sonderzeichen kennt. 

Du könntest natürlich die Zeichen ersetzen ü durch ue etc.


----------



## Nummer2 (24. Oktober 2003)

Hi tefla,

kann ich eigentlich nicht glauben, da es sich um einen teuren Profi-Account bei Deutschlands größtem Provider handelt. Es muss einen anderen Grund haben ... grübel ...

Kann es am FTP-Programm liegen und der Fehler beim Hochladen liegen?

Ciao,
Nummer2


----------



## tefla (24. Oktober 2003)

Nein daran kann es bestimmt nicht liegen. 

Die Funktion mail() übergibt die Parameter an sendmail, diese setzt die Zeichen inklusive Header zusammen und schickt sie raus an die angegebene eMailadresse. Wär ein einfacher Zeichensatz installiert, versteht der sendmail die Zeichen natürlich nicht so wie du willst. Er ersetzt die Zeichen mit den Positionen seines Zeichensatzes. 

Wenn es ein teuerer Profiaccount bei diesen Sauverein ist (sorry aber ist so), dann würd ich die Leute vom Support mal anrufen! Falls es da mittlerweile Leute mit Kompetenz gibt.


----------



## Nummer2 (24. Oktober 2003)

Unsere letzte Supportanfrage wurde – nach mehrmaliger Nachfrage – nach 2 Wochen beantwortet. Ohne brauchbares Ergebnis. Nein, wenn an meinem Code nichts falsch ist, werde ich das Problem lieber durch Vermeiden von Umlauten lösen. 

Danke trotzdem!
Nummer2


----------



## chibisuke (24. Oktober 2003)

und schon wieder der typische charset fehler...

gut.. sende einen zusätzlichen header.. und zwar einen wo du das verwendete charset mit angibst
z.B. "Content-Type: plain-text; charset=ISO-8859-1"
diese ISO nummer hinten ist das verwendete charset...
ISO-8859-1 = de-latin-1
das ist das charset das du brauchst.. dann sollte es eigendlich funktionieren


----------



## Nummer2 (25. Oktober 2003)

@ chibisuke

Schau doch bitte nochmal in meinen geposteten Code. Ich denke, ich habe alles so gemacht, wie Du es vorschlägst. Klappt trotzdem nicht. Ach übrigens, auf meinem privaten Mac mit Outlook Express 5.04 habe ich ebenfalls falsche Zeichen, allerdings andere. Ätzend, das Ganze.

Ciao,
Nummer2


----------



## chibisuke (25. Oktober 2003)

ups.. das hab ich gar nich so genau angeguckt...

äh naja dann kannst du nur versuchen die zeichen als UTF-8 zu senden
also encoding=UTF-8

und deinen string schickst du durch utf8_encode() 
dann sollte es eigendlich funktionieren, denn dann is auf jedenfall klar welches zeichen gemeint is..wird dann eben als multibyte übertragen..


----------

