Antworten auf deine Fragen:
Neues Thema erstellen

Mailversand Umlaute im Body kaputt, Subject OK

rakader

Watmahatdahatma

Moin,

Nach dem Versand über ein PHP-File, sind in der Mail Umlaute im Body kaputt. Umlaute im Subject sind dagegen OK.

Habe jetzt drei Stunden nach einer Lösung gesucht - und nichts gefunden. Kann jemand helfen?

Das Script sieht so aus:
Code:
<?php
$EmailFrom = "person@domain.eu";
$EmailTo = "persons@domain.eu";
$Subject = "Ihre Nachricht";
$name = Trim(stripslashes($_POST['name']));
$nachname = Trim(stripslashes($_POST['nachname']));
$strasse = Trim(stripslashes($_POST['strasse']));

[…SNIP…]

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}
// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $name;
$Body .= " ";

[…SNIP…]

// send email 
$success = mail($EmailTo, $Subject, $Body, "Von: <$EmailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=kontaktdanke.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=kontaktfehler.htm\">";
}
?>

Kenne mich mit PHP nicht sonderlich aus. Ich vermute den Fehler beim success-Befehl. Der Server spuckt offensichtlich UTF8 aus, denn in dieser Codierung ist alles OK. Indes kann ich kaum davon ausgehen, dass ein gängiges Mailprogramm auf UTF8 läuft (im Ggs. zu Browsern.)

Danke vorab für Eure Hilfe

Radulph
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Ich denke es liegt eindeutig an den fehlenden headern in deiner Mail oder behältst du uns was vor?

Hier im Forum gibt es einen Ansatz einer "gescheiten" Mail.


Und sogar im Manual stehen "komplette" Beispiele wie eine Mail Aufgebaut sein muss damit sie nicht beim Empfänger in Ihre Einzelteile zerfliegt
PHP: mail - Manual

Gruß M3g4


btw.: Warum das Rad neu erfinden wenn es klassen wie diese gibt Worx International Inc.
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Moin M3g4 - da schaue ich gleich mal nach. Mercie! Und nein, ich verheimliche nichts - es sind nach mehr als zehn Jahren wieder ein paar tastende Schritte mit PHP. Alles vergessen und nie gut gekonnt.

Edit: Nach Referenz hatte ich header und MIME-Type eingebaut - und mir hat's alles verschossen.
Die Anleitung hier im Forum ist gut. Mist - sollte ich nochmal von vorn beginnen? Das kann sich doch nur um eine Zeile handeln, die UTF nach ISO konvertiert. Nur wie?

Gruß
rakader
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Ich zitiere mal aus dem Manual und werde dich auf die Stelle "hinweisen"

Hier ein Beispiel einer HTML E-Mail

PHP:
<?php
// mehrere Empfänger
$empfaenger  = 'max@example.com' . ', '; // beachten Sie das Komma
$empfaenger .= 'moritz@example.com';

// Betreff
$betreff = 'Geburtstags-Erinnerungen für August';

// Nachricht
$nachricht = ' HTML BODY'; // hab ich mal raus genommen der Übersicht halber

// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
$header  = 'MIME-Version: 1.0' . "\r\n";

##########################################
# ja was genau macht er jetzt ab hier ???#
##########################################
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// zusätzliche Header
$header .= 'To: Simone <simone@example.com>, Andreas <andreas@example.com>' . "\r\n";
$header .= 'From: Geburtstags-Erinnerungen <geburtstag@example.com>' . "\r\n";
$header .= 'Cc: geburtstagsarchiv@example.com' . "\r\n";
$header .= 'Bcc: geburtstagscheck@example.com' . "\r\n";

// verschicke die E-Mail
mail($empfaenger, $betreff, $nachricht, $header);


Ich rate dennoch zum PHPMailer.

Gruß M3g4
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

"Argh" - danke! Kennst Du das: Du suchst etwas, es liegt vor deinen Augen, und du übersiehst es? Ich habe das Tut gestern sicher fünf, sechs Mal angeschaut.

Du meinst den PHPmailer von Worx, v5.0? Gibt es da etwas bei der Installation zu beachten (Ordnername, -struktur etc.)? Hört sich sicherer an, hab aber noch nie mit solch einem Paket gearbeitet (was nichts heißen soll - Beispiele sind ja dabei).

Edit: Muss auf Reisen und werde mir das mitnehmen. Mal was anderes. Danke für DEINE Hinweisführung
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Gern geschehen.

Wenn du Hilfe mit dem PHPMailer brauchst sag Bescheid. an sich ist dort nichts weiter zu beachten. Die Arbeit mit solchen Klassen erleichtert dir das handling in vielerlei Hinsicht und ich hatte bisher keinerlei Probleme mit nicht ankommenden Mails etc.

Gruß und gute Reise
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Moin moin, habe es mit dieser Klasse versucht. Blicke da überhaupt nicht durch und komme auch keinen Schritt weiter. Mir fehlen leider die Grundlagen. Und da ich dieses wohl nur einmal benötigen werde, frag ich mich, ob sich dieser Riesenlernaufwand rechnet. Ich vermute nicht. Geht es nicht irgenwie einfacher?

Auch $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; schafft keine Abhilfe - bin nach fünf Tagen soweit wie zuvor. (Und mit den Nerven am Ende.) Ist das ein Mist!

Ich habe vier Pflichtfelder als Klasse requiered definiert. Diese sollten überprüft werden. Wenn falsch, sollte in diesen Feldern ein Hinweis stehen. Wenn OK, Mail ab und Dankeseite erscheint.

Wie ich's auch anstelle - det würd nüscht. (Ich bin jetzt 20 Stunden darangesessen, ohne Ergebnis. Muss ich aufgeben?)
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Richte dir das hier mal so ein. Evtl. musst du dich beim Server noch authentifizieren.

Basics für SMTP findest du hier: SMTP Mail

PHP:
// Fehleranzeige auf ALLES setzen während der Entwicklungszeit
error_reporting(E_ALL);

// Klasse einbinden
require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

// E-Mail Content
$body = "DEINE E-MAIL"; // Korrektur meinerseits

// E-Mail kommt von
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo("name@yourdomain.com","First Last");

// E-Mail senden an
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

// Betreffszeile
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

// Alternetiver Content wenn kein HTML erlaubt
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
 
Zuletzt bearbeitet:

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

…da geht gar nichts. Egal wie ich es anstelle, es kommt ein Error:
Parse error: syntax error, unexpected T_VARIABLE in /www/htdocs/etcpp on line 16

Habe nach Anleitung auch die SMTP-Anmeldung eingebaut. Mit oder ohne - es kommt ein Parse-Fehler
 

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Oh sorry mein Fehler:

Hinweis: Parse Error deutet meist auf ein vergessenes ";" hin.

PHP:
// E-Mail Content
$body = "DEINE E-MAIL";
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

¡de nada! So klappt's. Das Einbinden von SMTP bringt aber den Fehler: Could not connect. Sollte aber zu lösen sein.

Wie mache ich jetzt weiter?
 

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

für SMTP brauchst du deine Daten von deinem Anbieter:
bei 1und1 ist das z.B. smtp.1und1.de (ohne jetzt Werbung machen zu wollen)

PHP:
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "yourname@yourdomain"; // SMTP account username
$mail->Password   = "yourpassword";        // SMTP account password
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Die Daten hab ich. Sitze bei all-inkl.
EDIT: Es funktioniert - es lag am falschen Port (25)
(Ich hatte das vorhin schon mit der Vorlage richtig gemacht - eben nur der Port.

Wie mache ich nun weiter, damit
a) die Felder von Input in die Mail geschrieben werden?
Ich gehe mal davon aus, dass ich bei $body die Klassen definieren muss. Nur wie? Und die müssen dann auch ausgegeben werden. Nur wo?
b) die Felder überprüft werden?
c) ggf. Fehler im Input ausgegeben werden (nicht in extra p-Tag)?
d) auf Danke-Seite und Fehler-Seite gelinkt wird (oder alternative Technik?

PHP:
<?php


// Fehleranzeige auf ALLES setzen während der Entwicklungszeit
error_reporting(E_ALL);

// Klasse einbinden
require_once('PHPMailer/class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

// E-Mail Content
$body = "Mail vom ÖRD";

$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "smtp.xyz.eu"; // sets the SMTP server
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "m01…@XYZ,eu"; // SMTP account username
$mail->Password   = "XYZ";        // SMTP account password  

// E-Mail kommt von
$mail->SetFrom('info@XYZ.eu', 'First Last');
$mail->AddReplyTo("info@XYZ.eu","First Last");

// E-Mail senden an
$address = "briefkasten@XYZ.eu";
$mail->AddAddress($address, "Das bin ich");

// Betreffszeile
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

// Alternetiver Content wenn kein HTML erlaubt
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
} 
?>
 
Zuletzt bearbeitet:

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

Wie mache ich nun weiter, damit
a) die Felder von Input in die Mail geschrieben werden?
Übernimm doch einfach das was du schon hattest ?

PHP:
<?php
//zunächst prüfen und ggf. ungewollte Zeichen / Codes entfernen
$name = Trim(stripslashes($_POST['name']));
$nachname = Trim(stripslashes($_POST['nachname']));
$strasse = Trim(stripslashes($_POST['strasse']));
// prepare email body text
$Body = "Name: ".$name." ";
$Body.= "Strasse:".$strasse." ";
?>
Ich gehe mal davon aus, dass ich bei $body die Klassen definieren muss. Nur wie? Und die müssen dann auch ausgegeben werden. Nur wo?
Klassen definieren? Nein. $body ist in dem Fall nur ein String der mittels: MsgHTML($message) angefügt wird.
phpMailer Doku schrieb:
Evaluates the message and returns modifications for inline images and backgrounds. Sets the IsHTML() method to true, initializes AltBody() to either a text version of the message or default text.

Bitte hier nachlesen: Worx International Inc.

b) die Felder überprüft werden?
Du prüfst die Felder doch schon. (naja beinahe) siehe 1. Abschnitt

c) ggf. Fehler im Input ausgegeben werden (nicht in extra p-Tag)?
die Fehler müsstest du an sich nur hinterlegen und dann auf den Eingabeseite markieren.

d) auf Danke-Seite und Fehler-Seite gelinkt wird (oder alternative Technik?
PHP:
<?php
if(!$mail->Send()) {
  #echo "Mailer Error: " . $mail->ErrorInfo;
  header("LOCATION: http://www.meineseite.de/fehlerseite.php");
} else {
  #echo "Message sent!";
  header("LOCATION:  http://www.meineseite.de/verschickt.php");
}
?>


Machen wir das mal ein wenig anders, denn so langsam werde ich schreibfaul: Let me google that for you
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Hab Dank. Zu den Prüffeldern: Ist eine stylishe Seite. Daher sollen die im betreffenden Feld sein. Nur wie?

Bin gestern Abend eine gefühlte Ewigkeit drangesessen. /n wollte er nicht nehmen - klar, ist ja HTML. Dafür hat sehr gut UTF-8 geklappt. Das ist jetzt mit Deinen Ergänzungen das Ergebnis ? es fehlt eben noch die Überprüfung sowie die Sperrung des Versands, wenn ein hidden field ausgefüllt wird:
PHP:
<?php

echo "<pre>";
print_r($_POST);
echo "</pre>";

// Fehleranzeige auf ALLES setzen während der Entwicklungszeit
error_reporting(E_ALL);

// Klasse einbinden
require_once('PHPMailer/class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"
$mail->CharSet 	  = 'utf-8';

// E-Mail Content
$body = "Mail von meiner Seite" . "<br />";
$body .= $_POST['name'] . " " . $_POST['nachname'] . "<br />";
$body .= $_POST['strasse'] . " " . $_POST['nummer'] . "<br />";
$body .= $_POST['plz'] . " " . $_POST['ort'] . "<br />";
$body .= $_POST['telefon'] . " " . $_POST['land'] . "<br />";
$body .= $_POST['post'] . "<br />";
$body .= $_POST['nachricht'];



$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "smtp.meinePost.de"; // sets the SMTP server
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "meinUser"; // SMTP account username
$mail->Password   = "meinPassword";        // SMTP account password  

// E-Mail kommt von
$mail->FromName = ('MeinerSeite');
$mail->From = 'mail@meineSeite.de';
$mail->AddReplyTo($_POST['post'], $_POST['name'] . " " . $_POST['nachname']);

// E-Mail senden an
$address = "mail@ meineSeite.de";
$mail->AddAddress($address, "MeinName");

// Betreffszeile
$mail->Subject    = "Nachricht von meineSeite.de";

// Alternetiver Content wenn kein HTML erlaubt
$mail->AltBody    = "Um diese Nachricht zu lesen, benötigen Sie ein HTML-fähiges E-Mail-Programm!"; // optional, comment out and test

$mail->MsgHTML($body);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
  header("LOCATION: http://meineSeite.de/fehler.php");
} else {
  echo "Message sent!";
  header("LOCATION:  http://meineSeite.de/danke.php");
} 
?>
 

M3g4Star

Nicht mehr ganz neu hier

AW: Mailversand Umlaute im Body kaputt, Subject OK

*hm* Soll ich jetzt hier wirklich weiter machen? So richtig vorkauen wollt ich das eigentlich nicht.

1. Sicheres auslesen von Post-Daten
PHP: Formulare verarbeiten - Manual

zum Beispiel so:
PHP:
<?php echo htmlspecialchars($_POST['name']); ?>.

Daten prüfen (evtl. Pflichtfelder) oder auch die "Sperrung des Versands der E-Mail" z.B. mit : PHP: isset - Manual und PHP: if - Manual sowie den dir vorhandenen Post Daten.

Zu den Prüffeldern: Ist eine stylishe Seite.
Das ist schön für dich nur wo bringt uns das jetzt weiter?

Gruß M3g4
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Lass gut sein. Als Anfänger packt man das nicht. Ich schaue mich nach einer anderen Lösung um.
Es kann nicht angehen, dass jeder Schritt einen ganzen Feierabend verschlingt.

Allenthalben vielen Dank für Deine Mühen.

Viele Grüße
Radulph
 

rakader

Watmahatdahatma

AW: Mailversand Umlaute im Body kaputt, Subject OK

Nun ja - leicht aufgeben ist in diesem Fall reichlich gedehnt. Ich brauchte es für ein CMS, MODx, um genauer zu sein. Da gibt es aber ein schönes Snippet, dass auch nicht ohne ist, aber all diese Probleme wie hier nicht macht. Zwischen einem klein wenig anpassen und der kompletten Programmierung ist eben ein Unterschied.
Und weit war ich noch lange nicht - da hat noch mehr als die Hälfte gefehlt.

Und dann muss man fairerweise die Güterabwägung berücksichtigen: Ich benötige dieses, wie gesagt, nur einmal.
Oder um ein Bild zu bemühen: Um nach New York zu gelangen, mache ich nicht vorher den Pilotenschein, sondern ich informiere mich, wie ich an ein Ticket komme.

Das soll nicht heißen, dass ich den Pilotenschein nicht irgendwann mache (ich mache ihn), aber zu einem Verkehrsflieger wird's nie reichen. (Ich habe leider den Eindruck, dass Programmierer den Blick links und rechts manchmal zu sehr missen lassen. Referenzen à la "Schau mal hier - steht doch alles da" werfen mehr Fragen auf als sie lösen, wenn man die Grundstruktur noch nicht begriffen hat. Eben Pontius zu Pilatus.)

Viele Grüße
Radulph
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben