Mailversand PHP Umlaute

Fragen zu PHP.
Fragen zu we:Tags bitte im Forum webEdition Templates erstellen (we:Tags) posten.
mobby
Senior Member
Beiträge: 1153
Registriert: Do 1. Sep 2005, 05:07

Mailversand PHP Umlaute

Beitragvon mobby » Do 1. Mär 2012, 20:41

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.
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1649
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: Mailversand PHP Umlaute

Beitragvon WBTMagnum » Do 1. Mär 2012, 21:56

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 :-)

mobby
Senior Member
Beiträge: 1153
Registriert: Do 1. Sep 2005, 05:07

Re: Mailversand PHP Umlaute

Beitragvon mobby » Do 1. Mär 2012, 22:10

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
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

mokraemer
Senior Member
Beiträge: 3145
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Mailversand PHP Umlaute

Beitragvon mokraemer » Do 1. Mär 2012, 23:16

in deiner Mail sind die Umlaute doppelt encodiert, ich würde mal das mb_encode_mimeheader weglassen.
webEdition-Kern-Entwickler

mobby
Senior Member
Beiträge: 1153
Registriert: Do 1. Sep 2005, 05:07

Re: Mailversand PHP Umlaute

Beitragvon mobby » Fr 2. Mär 2012, 15:50

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...
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

Benutzeravatar
Paladin
Senior Member
Beiträge: 361
Registriert: Mi 10. Feb 2010, 15:11
Kontaktdaten:

Re: Mailversand PHP Umlaute

Beitragvon Paladin » Fr 2. Mär 2012, 16:17

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

mobby
Senior Member
Beiträge: 1153
Registriert: Do 1. Sep 2005, 05:07

Re: Mailversand PHP Umlaute

Beitragvon mobby » Mo 5. Mär 2012, 14:56

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 */
    }
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

Benutzeravatar
Paladin
Senior Member
Beiträge: 361
Registriert: Mi 10. Feb 2010, 15:11
Kontaktdaten:

Re: Mailversand PHP Umlaute

Beitragvon Paladin » Mo 5. Mär 2012, 15:19

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.

mokraemer
Senior Member
Beiträge: 3145
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Mailversand PHP Umlaute

Beitragvon mokraemer » Mo 5. Mär 2012, 15:37

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... ;-)
webEdition-Kern-Entwickler

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1649
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: Mailversand PHP Umlaute

Beitragvon WBTMagnum » Mo 5. Mär 2012, 16:02

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

mokraemer
Senior Member
Beiträge: 3145
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Mailversand PHP Umlaute

Beitragvon mokraemer » Mo 5. Mär 2012, 19:50

@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.
webEdition-Kern-Entwickler

WBTMagnum
webEdition Partner
webEdition Partner
Beiträge: 1649
Registriert: Di 7. Mär 2006, 16:50
Wohnort: Wien
Kontaktdaten:

Re: Mailversand PHP Umlaute

Beitragvon WBTMagnum » Di 6. Mär 2012, 00:08

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

mobby
Senior Member
Beiträge: 1153
Registriert: Do 1. Sep 2005, 05:07

Re: Mailversand PHP Umlaute

Beitragvon mobby » Mo 26. Mär 2012, 16:09

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.
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)


Zurück zu „PHP“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast