PHP Mailformular und die lieben Umlaute

E

Emskerla

Gast
Liebes Forum,

zu diesem Thema ist das Internet voll, ich weiß. Habe stundenlang alles probiert, keine Chance.

PHP:
<?php

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];


$formcontent=" From: $name \n  Message: $message";
$recipient = "aaa@bbb.de";
$subject = "=?utf-8?b?".base64_encode($subject)."?=Hallo Du Heini!";
  
$mailheader = "From: $email \r\n";

mail($recipient, $subject, $formcontent, $mailheader) or die("Ihre E-Mail konnte nicht versendet werden. Bitte überprüfen Sie Ihre Angaben.");
echo "Vielen Dank für Ihre Anfrage! Wir werden uns schnellstmöglich mit Ihnen in Verbindung setzen.";

?>

Der Code funktioniert soweit, aber egal was ich eintrage, es kommen immer keine Umlaute an:
PHP:
From: Martin Möller 
  Message: Martin Möller ist verzweifelt

Ideen? Vielen Dank!
 
Hast du den Content Type Header mal zu setzen versucht?

Content-Type: text/plain; charset=utf-8; format=flowed

sowas in der Art...
 
Das auch schon versucht?
PHP:
$mailheader  .= 'MIME-Version: 1.0' . "\r\n";
$mailheader .= 'Content-type: text/html; charset=utf-8' . "\r\n";

Wie sieht denn der Inhalt aus?
Ist das auch HTML?
Dann vtl. mal:
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
setzen.
 
Vielen Dank.

Ja, habe ich alle schon probiert, 1 zu 1.
Das HTML sieht so aus: <meta http-equiv="content-type" content="text/html; charset=utf-8" />

Zum verrückt werden!
 
Dein Formular auch?
HTML:
<form action="" method="post" accept-charset="UTF-8">
 
Es geht immer noch nicht.

Im HTML steht:
PHP:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Im Formular:
PHP:
<form method="post" action="html_form_send.php" accept-charset="UTF-8">

Im PHP:
PHP:
$mailheader .= 'MIME-Version: 1.0' . "\r\n";
$mailheader .= 'Content-type: text/html; charset=utf-8' . "\r\n";

Ist die Stelle, an der das Gedöns im PHP steht wichtig? Ich mache normalerweise nichts in PHP.
 
Hast du schonmal statt
PHP:
$message = $_POST['message'];
PHP:
$message = "Test äöüß ...";

versucht ob das geht?
 
Emskerla schrieb:
Der Code funktioniert soweit, aber egal was ich eintrage, es kommen immer keine Umlaute an:
PHP:
From: Martin Möller 
  Message: Martin Möller ist verzweifelt
Das ist UTF-8 als ASCII interpretiert. Wo lässt du dir die Mail denn anzeigen?
 
Versuch's mal damit:
Code:
$headers .= "Content-Type: text/plain; charset = \"UTF-8\";\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "\n";
 
Im Zweifel, versuch mal eine der gängigen Mailing-Bibliotheken, wie z.B. PHPMailer. Dort sollte ein $mail->CharSet = "UTF-8"; das Problem weitestgehend aus der Welt schaffen (davon ausgehend, dass $mail ein vorher erzeugtes PHPMailer-Objekt ist)
 
Vielen Dank erst mal an alle! :)

Es funktioniert nichts. Insbesondere diese ganzen Sachen
Darlis schrieb:
Versuch's mal damit:
Code:
$headers .= "Content-Type: text/plain; charset = \"UTF-8\";\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "\n";
- bleiben erfolglos.

Das Einzige, was funktioniert ist:
PHP:
$strSubject   = "=?utf-8?b?".base64_encode($subject)."?=Anfrage über Website";
- allerdings weiß ich nicht, wie ich dieses Verfahren auf $message übertrage. Mein derzeitiger Code sieht so aus:

PHP:
 <?php

# Empfaenger
$strEmpfaenger = 'aaar@bbb.de';

# Betreff
$strSubject    = "=?utf-8?b?".base64_encode($subject)."?=Anfrage über aaa.de";

# Dankseite
# Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://www.aaa.de/Beta/index.html';

# Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$strDelimiter  = ":\t";

if($_POST) 
{
 $message = "";

 while(list($name,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $message .= $name.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $message .= $name.$strDelimiter.$value."\n";
  }
 }

 if(get_magic_quotes_gpc())
 {
  $message = stripslashes($message);
 }

 mail($strEmpfaenger, $strSubject, $message, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 //header("Location: $strReturnhtml");
 exit;
}

?>
 
Siehe oben: Abstrahiere, indem du eine der fortschrittlicheren Mailer-Klassen verwendest.

Dein Ansatz wird in der Praxis eh auf Probleme stoßen: Mails, die anonym über mail() verschickt werden, erhalten bei den meisten Spamfiltern signifikant erhöhte Spam-Ratings. Zu authentifiziertem SMTP-Versand wird dringend geraten. Daher: Mailer-Klasse mit SMTP-Support.
 
Daaron schrieb:
Siehe oben: Abstrahiere, indem du eine der fortschrittlicheren Mailer-Klassen verwendest.
Das glaube ich Dir aufs Wort, ich kann aber kein PHP. Und über diese Website werden, wenn es gut läuft, fünf E-Mails im Jahr verschickt, dafür setze ich mich nicht in einen Programmierkurs.

Die Weiterleitung mittels
PHP:
 mail($strEmpfaenger, $strSubject, $message, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
funktioniert übrigens auch nicht. Gibt es dafür eine einfache Lösung?
Ergänzung ()

Update:

Ich habe jetzt den SwiftMailer verwendet und alles funktioniert auf Anhieb.

Denke mal, dass dieses Vorgehen okay und up to date ist?
 
Emskerla schrieb:
Das glaube ich Dir aufs Wort, ich kann aber kein PHP. Und über diese Website werden, wenn es gut läuft, fünf E-Mails im Jahr verschickt, dafür setze ich mich nicht in einen Programmierkurs.
Aber wo ist denn der Unterschied, ob du anhand von veralteten Guides eine Lösung mit mail() baust, oder ob du die Dokumentation einer Mailing-Klasse liest?
https://github.com/PHPMailer/PHPMailer#a-simple-example
Was ist daran schwerer als deine bisherige Lösung?

Die Weiterleitung mittels
...
funktioniert übrigens auch nicht. Gibt es dafür eine einfache Lösung?
Definiere "funktioniert nicht". Hast du mal die Error Logs angeguckt?
Aber ich geb mal n eiskalten Tip ab: Du hast vorher irgendwo eine x-beliebige Ausgabe. Dazu zählen:
- Leerzeilen außerhalb von <?php ... ?>
- fälschlicherweise vorhandenes UTF-BOM
- HTML-Code außerhalb von <?php ?>
- echo's und ähnliche Ausgabe-Befehle
- sichtbare Errors und Warnings

Ich habe jetzt den SwiftMailer verwendet und alles funktioniert auf Anhieb.
SwiftMailer ist auch eine der beliebten Mailer-Klassen. Ich persönlich mag PHPMailer lieber, aber Swift ist auch gut. Du siehst also selbst: Es geht auch ohne 4 Wochen PHP-Intensivkurs. Man darf nur eben nicht gleich abblocken.
 
Daaron schrieb:
SwiftMailer ist auch eine der beliebten Mailer-Klassen. Ich persönlich mag PHPMailer lieber, aber Swift ist auch gut. Du siehst also selbst: Es geht auch ohne 4 Wochen PHP-Intensivkurs. Man darf nur eben nicht gleich abblocken.
Ja, jetzt funktioniert alles und ich werde im laufe der Zeit sicher noch Optimierungen vornehmen. Habe mir vor lauter Freude gleich mal ein Bier aufgemacht.
 
Zurück
Oben