Seite 1 von 1

Mailversand PHP Umlaute

Verfasst: Do 1. Mär 2012, 20:41
von mobby
Hallo,
habe mal wieder ne Frage an die PHP-Spezis
Ich habe ein Gästebuch (das von Dirk Einecke) und wollte es um eine Mail bei Eintrag erweitern:

Code: Alles auswählen

<?php
$empfaenger  = 'mail@mail.de'; 
// Betreff
$betreff = 'Neuer Gästebucheintrag' ;
// Nachricht
$nachricht = 'Es wurde ein neuer Gästebucheintrag veröffentlicht. blablabla ';
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$header .= 'From: Webseite  <mail@mail.de>' . "\r\n";
mail($empfaenger, $betreff, $nachricht, $header);
?>
Leider werden die Umlaute nicht richtig angezeigt. Wo ist der Fehler? Ich übergebe doch den Zeichensatz mit.

Re: Mailversand PHP Umlaute

Verfasst: Do 1. Mär 2012, 21:56
von WBTMagnum
Hallo Mobby,

Hier der Code den wir in solchen Fällen - allerdings für UTF-8 Mails - verwenden:

Code: Alles auswählen

$recipientEmail  = 'mail@mail.de';
$senderEmail = 'mail@mail.de';

$subject = 'Neuer Gästebucheintrag' ;
$subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');

/* Create mail header */
$headers = 'MIME-Version: 1.0' . PHP_EOL;
$headers .= 'Content-type: text/plain; charset=UTF-8' . PHP_EOL;
$headers .= "From: $senderEmail" . PHP_EOL;

/* Additional parameters (e.g. for mail envelope) */
$additional_parameters = '-f' . $senderEmail . PHP_EOL;

if(!mail($recipientEmail, $subject, $mailbody, $headers, $additional_parameters))
{
  /* handle errors */
}
else
{
  /* show success message */
}
Vielleicht hilft dir das ja weiter.

LG,
Sascha

PS: Schei* Encoding :-)

Re: Mailversand PHP Umlaute

Verfasst: Do 1. Mär 2012, 22:10
von mobby
Hallo Sascha,
leider geht es nicht. Hier mal der Header der Mail

Code: Alles auswählen

Return-Path: <mail@mail.de>
X-Original-To: mail@mail.de
Received: from mail-in-01.xxx-online.net (mail-in-01.xxx-online.net [151.189.21.41])
	by mail-in-07-z2.xxx-online.net (Postfix) with ESMTP id 709FCE1901
	for <mail@mail.de>; Thu,  1 Mar 2012 21:05:54 +0100 (CET)
Received: from xxx.de (xxx.de [80.246.53.17])
	by mx.xxx.de (Postfix) with ESMTP id 66E955A0FC
	for <mail@mail.de>; Thu,  1 Mar 2012 21:05:54 +0100 (CET)
X-DKIM: Sendmail DKIM Filter v2.8.2 mx.xxx.de 66E955A0FC
Received: by xxx.de (Postfix, from userid 875)
	id 31F0710E8284E; Thu,  1 Mar 2012 21:05:54 +0100 (CET)
To: mail@mail.de
Subject: Neuer =?UTF-8?Q?G=C3=83=C2=A4stebucheintrag?=
X-PHP-Script: www.xxx.php for 82.83.158.201
MIME-Version: 1.0
Content-type: text/plain; charset=UTF-8
From: mail@mail.de
Message-Id: <20120301200554.31F0710E8284E@xxx.de>
Date: Thu,  1 Mar 2012 21:05:54 +0100 (CET)
X-DCC-xxx-Metrics: mail-in-07-z2 1242; Body=0
X-xxx-Antispam:  SPF_FAIL SAME_FROM_AND_TO
X-xxxSpamBlocker: Spamcount: 6 Sensitivity: 10
Weiß nicht ob es hilft :-(
Das Dokument selber hat übrigens auch UTF-8

Re: Mailversand PHP Umlaute

Verfasst: Do 1. Mär 2012, 23:16
von mokraemer
in deiner Mail sind die Umlaute doppelt encodiert, ich würde mal das mb_encode_mimeheader weglassen.

Re: Mailversand PHP Umlaute

Verfasst: Fr 2. Mär 2012, 15:50
von mobby
mokraemer hat geschrieben:in deiner Mail sind die Umlaute doppelt encodiert, ich würde mal das mb_encode_mimeheader weglassen.
Danke für den Tipp, aber auch das will nicht. Ich gebe es auf und schreibe ae...

Re: Mailversand PHP Umlaute

Verfasst: Fr 2. Mär 2012, 16:17
von Paladin
Wenn dein Dokument UTF-8 hat und du im Mailheader ISO setzt dann kann auch nur Datenmüll ankommen.
Setzmal das encoding konsistent auf UTF-8 und sende nochmal eine Mail mit Sonderzeichen ab

Re: Mailversand PHP Umlaute

Verfasst: Mo 5. Mär 2012, 14:56
von mobby
Ist hier nicht alles auf UTF-8?

Code: Alles auswählen

    $recipientEmail  = 'mail@mail.de';
    $senderEmail = 'mail@mail.de';

    $subject = 'Neuer Gästebucheintrag' ;
    $subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');

    /* Create mail header */
    $headers = 'MIME-Version: 1.0' . PHP_EOL;
    $headers .= 'Content-type: text/plain; charset=UTF-8' . PHP_EOL;
    $headers .= "From: $senderEmail" . PHP_EOL;

    /* Additional parameters (e.g. for mail envelope) */
    $additional_parameters = '-f' . $senderEmail . PHP_EOL;

    if(!mail($recipientEmail, $subject, $mailbody, $headers, $additional_parameters))
    {
      /* handle errors */
    }
    else
    {
      /* show success message */
    }

Re: Mailversand PHP Umlaute

Verfasst: Mo 5. Mär 2012, 15:19
von Paladin
In deinem ersten Beispiel war da noch was mit ISO.

Evtl. solltest du PHP_EOL durch ein explizites "\r\n" ersetzen. Nicht immer stimmt das systemeigene EOL mit dem gewünschten (und erwarteteten \r\n ) für die Mail-header überein ... muss aber nur bei den Headern benutzt werden. Dadurch könnte es sein, dass der Content-Type im Header nicht korrekt ausgelesen wird (weil da ja "nur" ein \n oder nur ein \r steht) und damit ist dein encoding i.A.

Re: Mailversand PHP Umlaute

Verfasst: Mo 5. Mär 2012, 15:37
von mokraemer
mal ganz langsam:

Code: Alles auswählen

 $subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');
Warum??? Ich denke das Dok ist UTF-8 und die Mail soll es auch sein - damit encodierst du alles noch mal und es kommen die kaputten Umlaute raus.

php kommt beim mailen recht gut mit \n zurecht und zumindest unter Linux wird das auch entsprechend von php/mailer korrigiert (denn in mails muß ja \r\n stehen) - PHP_EOL wäre mir schon zu viel Tipparbeit... ;-)

Re: Mailversand PHP Umlaute

Verfasst: Mo 5. Mär 2012, 16:02
von WBTMagnum
mokraemer hat geschrieben:mal ganz langsam:Code: Alles auswählen $subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');Warum??? Ich denke das Dok ist UTF-8 und die Mail soll es auch sein - damit encodierst du alles noch mal und es kommen die kaputten Umlaute raus.
Folgender Hintergrund:
Der Charset bei Mails bezieht sich meines Wissens nach nur auf den Body, nicht jedoch auf das Subject. Da einige E-Mailclients Probleme damit haben UTF-8 im Subject zu erkennen, machen wir noch ein zusätzliches Multi-Byte encoding. Das hat sich bei unseren Projekten ganz gut bewährt.

mokraemer hat geschrieben:php kommt beim mailen recht gut mit \n zurecht und zumindest unter Linux wird das auch entsprechend von php/mailer korrigiert (denn in mails muß ja \r\n stehen) - PHP_EOL wäre mir schon zu viel Tipparbeit...
Folgender Hintergrund dazu:
Wir hatten schon mehrmals Probleme mit EOLs bei unterschiedlichen Systemen (Win/Linux) und sind zu dem Schluss gekommen, dass der Einsatz von PHP_EOL die einzige robuste Lösung ist.


Liebe Grüße,
Sascha

Re: Mailversand PHP Umlaute

Verfasst: Mo 5. Mär 2012, 19:50
von mokraemer
@Sascha: du hast schon recht mit dem encoding - aber die Mail oben zeigt doch das hier UTF-8 Zeichen 2* encodiert wurden.

Also hier wird nichts anderes helfen als sich die Mail noch mal exakt anzuschauen.
Irgendwo wird da 2* am encoding gedreht - sei es durch ein Option am sendmail oder sonst wo. Ich könnte mir nämlich gut vorstellen das sendmail sich bereits um das korrekte encoding kümmert - sonst müßte das ja jede Anwendung selbst wieder machen.

Re: Mailversand PHP Umlaute

Verfasst: Di 6. Mär 2012, 00:08
von WBTMagnum
Bzgl. dem doppelten Encoding:
Vielleicht hilft es "mb_internal_encoding('UTF-8')" vor dem mb_encode_mimeheader() aufzurufen. Lt. der Kommentare auf php.net könnte das helfen.

HTH,
Sascha

Re: Mailversand PHP Umlaute

Verfasst: Mo 26. Mär 2012, 16:09
von mobby
Danke für eure Hilfe. Ich habe die Tipps befolgt - leider ohne Erfolgt. Ich habe auf das Projekt keinen Zugriff mehr, deshalb kann ich den Fehler nicht mehr nachvollziehen. Auf meinen Testsystem geht alles wunderbar.
Vielen Dank aber noch einmal für die Hilfe.