Neu Newsletter Symbole

nolli

Aktives Mitglied
28. Juni 2017
22
0
Einen wunderschönen guten Abend wünsch ich.

Mir ist im JTL Shop ein Problem aufgefallen. Es geht dabei um Symbole (Meta Tag Sonderzeichen) im Newsletter.

Wir man Unicode Symbole oder Meta Tag Sonderpreisen im Betreff verwenden werden diese nach dem Emailversand falsch angezeigt. <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> ist da wohl der aktuelle Tag. Um aber die Unicode Tags nutzen zu können müßte man <meta http-equiv=Content-Type content="text/html; charset=unicode"> als Charset nehmen.

Jetzt ist das Problem wo stellt man das um. Welche Datei generiert den Newsletter???
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
kann es sein das die class.core.NiceMail.php für die Betreff Zeile beim Email Versand verantwortlich ist?? Oder welche Datei generiert den kompletten Email Versand im Shop.

Ich suche doch nur einen Weg um das Charset für den Betreff zu ändern. Hat hier niemand eine Idee???
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
ich habe jetzt die class.core.NiceMail.php mal testweise verändert. Leider bekommen alle rausgehende Emails trotzdem den Header Subject: =?iso-8859-1?Q?

die class.core.NiceMail.php wird scheinbar überhaupt nicht verwendet. Kann mir jemand sagen ob das Richtig ist oder welche Datei für den Versand der Email Header zuständig ist???
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
keiner eine geniale Idee oder einen Tipp wo ich die Datei für den Versand der Emails finde??? dazu muß es doch Infos geben
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Also egal was ich mache ich bekomme noch nicht mal eine Veränderung hin. Der Header bleibt immer gleich und der Zusatz =?iso-8859-1?Q? vorhanden.

Kann mir keiner sagen ob die class.core.NiceMail.php die Richtige Email für den Versand der Emails vom Shop (Nachrichten und Newsletter) ist??
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
Was hast du denn bisher in dieser Datei geändert? Für den Charset wird ja die Konstante JTL_CHARSET verwendet, welche in der includes/defines.php auf "iso-8859-1" global definiert ist. Hierran würde ich auch garnichts ändern, da sich das auf den gesamten Shop auswirken wird.
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
das charset habe ich ersetzt da ich ja nur bei den Email headers das andere charset haben will.

ich habe den code im letzten Abschnitt so verändert:

/**
* @param string $string
* @return string
*/
function encode_iso88591($string)
{
$text = '=? Content-Type: text/html; charset=UTF-8 ?Q?';

for ($i = 0; $i < strlen($string); $i++) {
$val = ord($string[$i]);
if ($val > 127 or $val == 63) {
$val = dechex($val);
$text .= '=' . $val;
} else {
$text .= $string[$i];
}
}
$text .= '?=';

return $text;
}

Jedoch werden die Änderungen im Shop einfach nicht übernommen.
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
es ist
Was hast du denn bisher in dieser Datei geändert? Für den Charset wird ja die Konstante JTL_CHARSET verwendet, welche in der includes/defines.php auf "iso-8859-1" global definiert ist. Hierran würde ich auch garnichts ändern, da sich das auf den gesamten Shop auswirken wird.

Das Problem ist das egal was ich an der class.core.NiceMail.php auch ändere es wirkt sich nicht aus. Nur wenn ich die Datei lösche geht die Seite nicht mehr :D Ansonsten scheint es fast als würde die Datei ignoriert.
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Ich muß einfach noch mal fragen ob wirklich niemand eine Idee dazu hat :(

1) die class.core.NiceMail.php müßte doch die Richtige Datei sein um den Email-Header zu bearbeiten oder?

2) wenn ja wieso geht dann der $text = '=? Content-Type: text/html; charset=UTF-8 ?Q?'; nicht :(
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
Wie wäre es denn, wenn du einfach mal die beiden folgenden Zeilen abänderst:

Code:
$headers .= 'Content-Type: text/plain; charset=' . JTL_CHARSET . $eol;
zu
Code:
$headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
und
Code:
mail($To, encode_iso88591($Subject), $Msg, $headers);
zu
Code:
mail($To, $Subject, $Msg, $headers);
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Wie wäre es denn, wenn du einfach mal die beiden folgenden Zeilen abänderst:

Code:
$headers .= 'Content-Type: text/plain; charset=' . JTL_CHARSET . $eol;
zu
Code:
$headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
und
Code:
mail($To, encode_iso88591($Subject), $Msg, $headers);
zu
Code:
mail($To, $Subject, $Msg, $headers);
Hallo Martinwolf Dank für die Hilfe. Leider klappt es nicht. Ich habe die Datei class.core.NiceMail.php nur nach deinen vorgaben verändert. Im Header des Newsletters wird Subject: &#10036; &#10036; ausgegeben.

Die Emailvorlage die ich verändert habe (mit Sonderzeichen) zeigt Subject: =?iso-8859-1?Q?&#9917;

Ich habe die Datei jetzt nur nach deinen Vorgaben verändert. Den Blog function encode_iso88591($string) haben ich im Original verwendet oder war mein Text da schon Richtig??
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
Die Funktion encode_iso88591 garnicht verändern, da diese durch die zweite Anpassung garnicht mehr angesprochen wird. Ich habs auch nicht getestet, da ich hier kein System habe mit funktionierendem E-Mail Versand. Daher, sind meine Änderungen nur theoretisch.
 
  • Gefällt mir
Reaktionen: nolli

nolli

Aktives Mitglied
28. Juni 2017
22
0
PHP:
<?php
/**
 * @copyright (c) JTL-Software-GmbH
 * @license http://jtl-url.de/jtlshoplicense
 */

/**
 * mail functions
 *
 * @param string $FromName
 * @param string $FromMail
 * @param string $ReplyAdresse
 * @param string $To
 * @param string $Subject
 * @param string $Text
 * @param string $Html
 * @return bool
 */
function SendNiceMailReply($FromName, $FromMail, $ReplyAdresse, $To, $Subject, $Text, $Html = '')
{
    //endl definieren
    if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
        $eol = "\r\n";
    } elseif (strtoupper(substr(PHP_OS, 0, 3) == 'MAC')) {
        $eol = "\r";
    } else {
        $eol = "\n";
    }

    $FromName = StringHandler::unhtmlentities($FromName);
    $FromMail = StringHandler::unhtmlentities($FromMail);
    $Subject  = StringHandler::unhtmlentities($Subject);
    $Text     = StringHandler::unhtmlentities($Text);

    $Text = $Text ? $Text : 'Sorry, but you need an html mailer to read this mail.';

    if (strlen($To) === 0) {
        return false;
    }

    $mime_boundary = md5(time()) . '_jtlshop2';
    $headers       = '';

    if (strpos($To, 'freenet')) {
        $headers .= 'From: ' . strtolower($FromMail) . $eol;
    } else {
        $headers .= 'From: ' . $FromName . ' <' . strtolower($FromMail) . '>' . $eol;
    }

    $headers .= 'Reply-To: ' . strtolower($ReplyAdresse) . $eol;
    $headers .= 'MIME-Version: 1.0' . $eol;
    if (!$Html) {
        $headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
        $headers .= 'Content-Transfer-Encoding: 8bit' . $eol . $eol;
    }

    $Msg = $Text;
    if ($Html) {
        $Msg = '';
        $headers .= 'Content-Type: multipart/alternative; boundary=' . $mime_boundary . $eol;

        # Text Version
        $Msg .= '--' . $mime_boundary . $eol;
        $Msg .= 'Content-Type: text/plain; charset=' . JTL_CHARSET . $eol;
        $Msg .= 'Content-Transfer-Encoding: 8bit' . $eol . $eol;
        $Msg .= $Text . $eol;

        # HTML Version
        $Msg .= '--' . $mime_boundary . $eol;
        $Msg .= 'Content-Type: text/html; charset=' . JTL_CHARSET . $eol;
        $Msg .= 'Content-Transfer-Encoding: 8bit' . $eol . $eol;
        $Msg .= $Html . $eol . $eol;

        # Finished
        $Msg .= '--' . $mime_boundary . '--' . $eol . $eol;
    }
    mail($To, $Subject, $Msg, $headers);

    return true;
}

/**
 * @param string $string
 * @return string
 */
function encode_iso88591($string)
{
    $text = '=?' . JTL_CHARSET . '?Q?';

    for ($i = 0; $i < strlen($string); $i++) {
        $val = ord($string[$i]);
        if ($val > 127 or $val == 63) {
            $val = dechex($val);
            $text .= '=' . $val;
        } else {
            $text .= $string[$i];
        }
    }
    $text .= '?=';

    return $text;
}

habe ich jetzt aber es will einfach nicht. Kann es sein das $Subject jetzt überhaupt kein charset bekommt??? Ich wäre dir super dankbar wenn du noch mal drauf schauen könntest :) Ich verzweifel daran gerade
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Also ich habe es mit dem Quelltext oben nochmals über den Newsletter probiert. das $Subject steht im header definitiv ohne charset davor. Ich kann kein Php aber kann es nicht echt sein das $Subject überhaupt nicht bearbeitet wird?
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Wie wäre es denn, wenn du einfach mal die beiden folgenden Zeilen abänderst:

Code:
$headers .= 'Content-Type: text/plain; charset=' . JTL_CHARSET . $eol;
zu
Code:
$headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
und
Code:
mail($To, encode_iso88591($Subject), $Msg, $headers);
zu
Code:
mail($To, $Subject, $Msg, $headers);

@Martin wird $Subject durch deine Änderungen überhaupt umgeschrieben???

Code:
$headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
verändert doch die headers

und ohne encode_iso88591($Subject), müßte $Subject doch genauso wie zuvor aussehen oder?
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
@nolli: Nein, $Subject wird nicht verändert, es wird 1:1 übernommen wie es an die E-Mail-Funktion übergeben wird. Zeige doch einfach mal den Inhalt deines Betreffs und wie er in der E-Mail anschließend ankommt.
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
@nolli: Nein, $Subject wird nicht verändert, es wird 1:1 übernommen wie es an die E-Mail-Funktion übergeben wird. Zeige doch einfach mal den Inhalt deines Betreffs und wie er in der E-Mail anschließend ankommt.

X-Original-To: mail@mail.com
Delivered-To: mail@mail.com
Received: by xxx.jtl- hosting.de (Postfix, from userid 10008)
id 871055C834A8; Tue, 27 Feb 2018 14:38:54 +0100 (CET)
Date: Tue, 27 Feb 2018 14:38:54 +0100
To: <mail@mail.com>
From: youspo.com <mail@mail.com>
Reply-To: xxx.com <mail@mail.com>
Subject: &#10004; &#10036; Testemail mit Sonderzeichen
Message-ID: <795bb6497d336aba6bdc427d28618c14@xxx.com>
X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/alternative;

steht im Email Header. Wobei &#10004; &#10036; die Sonderzeichen wären. Beide werden aber nicht angezeigt. Ein Charset ist hierfür überhaupt nicht da oder sehe ich das falsch?
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
@nolli: Nein, $Subject wird nicht verändert, es wird 1:1 übernommen wie es an die E-Mail-Funktion übergeben wird. Zeige doch einfach mal den Inhalt deines Betreffs und wie er in der E-Mail anschließend ankommt.
Ich habe die Versandart der EMails (JTL Hosting) jetzt auf SMTP geändert. der Header ist aber immer noch der gleiche wie zuvor.

Wäre

PHP:
function encode_iso88591($string)
{
    $text = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';

    return $text;
}
nicht eigentlich die Angabe um das Charset für subject zu setzen?
 

nolli

Aktives Mitglied
28. Juni 2017
22
0
Wie wäre es denn, wenn du einfach mal die beiden folgenden Zeilen abänderst:

Code:
$headers .= 'Content-Type: text/plain; charset=' . JTL_CHARSET . $eol;
zu
Code:
$headers .= 'Content-Type: text/plain; charset=UTF-8' . $eol;
und
Code:
mail($To, encode_iso88591($Subject), $Msg, $headers);
zu
Code:
mail($To, $Subject, $Msg, $headers);
Hallo Martin
Ich habe deine Veränderung noch mal probiert mit dem SMTP Versand aber auch dann bekommt Subjekt einfach kein charset. Das verwunderliche ist das die Vorlagen (Emails) das iso charset haben. Hast du eine Erklärung dafür?