Newsletter Handler Module V3.0.1 + mehrsprachige e-mails

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 20. Apr 2006, 18:20

Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 08:53

Ich habe jetzt etwas rumprobiert und glaub eine nicht schlechte Lösung gefunden:

Im Newsletter-Handler-Modul habe ich jeweils vor der Zeile

Code: Alles auswählen

$mail->Subject  = $subject;
folgendes eingefügt:

Code: Alles auswählen

$btext = $subject;
$subject = '';
$btext = chunk_split($btext, 15, '|');
$betreff = explode('|',$btext);
foreach ($betreff as $u)
{ $subject .= '=?'.$encoding[$lang].'?Q?'.imap_8bit($u).'?= '; }
Die aufwändige Aufsplittung ist nötig, weil der fertige MIME-kodierte String zwischen =? und ?= (inkl.) nur 75 Zeichen lang sein darf. Wenn alle Zeichen kyrillisch sind, geht das bei 15 Zeichen grad durch. Und man darf mehrere solche Strings hintereinander haben.

Das gleiche in class.newsletter.php gemacht.

Resultat:
Alle Mails, die vom Newsletter-Handler-Modul verschickt werden, kommen nun perfekt an. Jedenfalls in Thunderbird. Sehr gut. :D
Beim Verschicken eines Newsletters allerdings (ich glaube, das kommt dann von class.newsletter.php) wird $encoding[$lang] nicht ausgeführt, sondern liefert nur einen Leerstring.
Woran kann das liegen? Ich kann mich erinnern, dass es gestern mal schön korrekt den Zeichensatz zurückgeliefert hat.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 21. Apr 2006, 09:46

Super! Da hätte ich mich warscheinlich totgefummelt.

Ist $encoding und $lang als global in der jeweiligen Funktion definiert? Was kommt bei echo $encoding[$lang]; (in der Funktion der Klasse) raus?

Ich muss gestehen, dass ich gar nicht weiss, wo die $encoding-Variable definiert wird, vielleicht muss man da nochmal Hand anlegen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 10:06

ja, die beiden Variablen habe ich in der Funktion "send" als global definiert.
Bei echo $encoding[$lang]; wird nichts ausgegeben. Ich habe auch getestet, wo etwas ausgegeben würde, indem ich am gleichen Ort echo 'markus'; eingegeben habe. Das 'markus' wird ausgegeben, aber eben sonst nichts.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 21. Apr 2006, 10:09

Ja, dann muss man nochmal nachforschen, woher $encoding eigentlich stammt. Ggf. kann man es als (optionalen) Parameter der send-Funktion noch hinten anfügen - aber auch dafür müsste es im Backend zur Verfügung stehen und damit eigentlich auch der Klasse als globale Variable, mmmmmh.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 13:07

also wie gesagt, im Newsletter-Handler-Modul wird es völlig korrekt angewendet.
Soll ich dein "mmmmmh" so verstehen, dass Du das suchst?
Wenn ich helfen kann, wie soll ich vorgehen?

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 21. Apr 2006, 13:11

Mmmmh, heißt, ich denke (und würde heute abend Suchen). Du kannst einfach mal die Source-Dateien durchsuchen, wo $encoding als Variable erzeugt und gefüllt wird.

Wenn unter Windows XP und Windows XP findet gar kein Vorkommen bei Suche nach .php (Datei) und encoding (enthält), sage Bescheid, dann gibt es einen Tipp, wie man das korrigieren kann...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 13:28

ist tatsächlich so. Wenn ich (win xp) nach *.php und "encoding" (enthält) suche, findet er gar nichts.
Wenn ich ohne *.php suche, findet er alles mögliche, nur keine php-Datei

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Fr 21. Apr 2006, 13:38

Das, womit dir HerrB helfen wollte (wie man unter Windows php-Dateien durchsuchen kann), findest du hier:
http://www.contenido.org/forum/viewtopic.php?t=7790
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 14:38

so. ich glaub, ich hab den hasen: Die Variable wird frisch fröhlich in der front_content.php generiert. Der Newsletter-Handler läuft über das Front-End, weshalb dort die Variable $encoding[$lang] funktioniert. Das Versenden des Newsletters hingegen hat mit dem Front-End nichts zu tun, weshalb die Variable auch nicht vorhanden ist.
Könnt's das sein?

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 21. Apr 2006, 15:18

Yep. Probiere bitte mal echo $aLanguageEncodings[$lang];

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 15:25

ergibt ebenfalls nichts.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 21. Apr 2006, 16:38

Ah, jetzt sehe ich, das gilt nur für den Header. Nein, dann müsste man die Funktion nachbauen. Eigentlich gehört sie in eine Tool-Datei, sowas wie functions.general.php, aber hier würde ich sie in die include.newsletter_send.php integrieren und das Encoding als Parameter der Send-Methode mitgeben (d.h. auch: Parameter für die Funktion in class.newsletter.php ergänzen).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 17:36

Danke. Ich versuchs mal...

markusheinzer
Beiträge: 81
Registriert: Do 8. Sep 2005, 13:18
Wohnort: Sarajevo
Kontaktdaten:

Beitrag von markusheinzer » Fr 21. Apr 2006, 18:30

Ich habs.

1. Schritt:

In der include.newsletter_send.php vor der function fncWriteClientLog($msg) folgenden Code einfügen:

Code: Alles auswählen

/**
* Looks up the encoding-charset of the current language
*/	
function encodingcharset() {
    global $cfg, $lang;

    $sql = "SELECT idlang, encoding
              FROM ".$cfg["tab"]["lang"]."
			 WHERE idlang = $lang";

    $db2 = new DB_Contenido;

    $db2->query($sql);
    $db2->next_record();
	
    return $db2->f("encoding");

}
2. Schritt:

In der gleichen Datei in der function fncWriteClientLog($msg) die Zeile

Code: Alles auswählen

$aResult = $oNewsletter->send($iIDCatArt, $sSendOption, $aSelGroups, $iDispatchCount, $_REQUEST["chunk"]);
wie folgt ergänzen:

Code: Alles auswählen

$aResult = $oNewsletter->send($iIDCatArt, $sSendOption, $aSelGroups, $iDispatchCount, $_REQUEST["chunk"], encodingcharset());
3. Schritt:

In der Datei class.newsletter.php folgende Zeile

Code: Alles auswählen

function send($idcatart, $destination = "other", $to = "", $chunksize = 0, $chunk = 0)
so ergänzen:

Code: Alles auswählen

function send($idcatart, $destination = "other", $to = "", $chunksize = 0, $chunk = 0, $encoding = "iso-8859-1")
4. Schritt:

In der gleichen Datei nach der Zeile

Code: Alles auswählen

$mail = new phpmailer();
folgende Zeile einfügen:

Code: Alles auswählen

$mail->CharSet = $encoding;
5. Schritt:

In der gleichen Datei etwas weiter oben nach der Zeile

Code: Alles auswählen

$subject = $this->get("subject");
folgenden Code einfügen:

Code: Alles auswählen

if (substr($subject,0,2) <> '=?')    // Nur das erste Mal encoden

{

	$betreff = chunk_split($subject, 15, '|');
	$betreff_array = explode('|',$betreff);
	$subject = '';
	foreach ($betreff_array as $u)
	{  $subject .= '=?'.$encoding.'?Q?'.imap_8bit($u).'?= '; }

}

Ich glaube, das war alles. wow. Hätte ich nicht gedacht, dass ich das hinkriege.

@HerrB: Danke für die Hilfe immer.

@alle: Kommentare natürlich erwünscht.
Zuletzt geändert von markusheinzer am Sa 22. Apr 2006, 06:30, insgesamt 1-mal geändert.

Gesperrt