Seite 1 von 7

Newsletter mit HTML Funktionalität

Verfasst: Mi 2. Nov 2005, 10:00
von simu
Hallo allerseits!

Die Integration von HerrBs Newsletter in die 4.6er C-Version sieht ja schon mal ganz gut aus, funktioniert auch einwandfrei. Einziger Mangel ist, dass das Senden eines HTML-Newsletter (noch) nicht möglich ist, deshalb habe ich mich entschlossen den Newsletter mit dieser Funktionalität zu erweitern. Ziel war es, alternativ zum Textfeld, ein weiteres Feld mit dem WYSIWYG Editor anzuzeigen, um neben dem Text-Newsletter auch einen HTML-Newsletter zu verfassen.

Die beiden Formate werden, dann im selben eMail versandt und je nach Einstellungen des Client wird entweder die HTML- oder die Text-Version angezeigt.

Anbei die Änderungen die dazu vorgenommen werden müssen:

Die DB-Tabelle (prefix)_news muss mit einer Spalte erweitert werden:

Code: Alles auswählen

ALTER TABLE `!PREFIX!_news` ADD `messageHTML` TEXT AFTER `message`;

Dann in der Datei contenido/includes/include.newsletter_edit.php

Nach folgender Zeile (53)

Code: Alles auswählen

$message  = stripslashes($message);
folgende einfügen:

Code: Alles auswählen

$messageHTML  = stripslashes($messageHTML);

Nach folgender Zeile (83)

Code: Alles auswählen

$newsletter->set("message", $message);
folgende einfügen:

Code: Alles auswählen

$newsletter->set("messageHTML", $messageHTML);

Nach folgender Zeile (130)

Code: Alles auswählen

$form->add(i18n("Message"), $message->render());
folgende Zeilen einfügen:

Code: Alles auswählen

$editor_content = $newsletter->get("messageHTML");
include ($cfg["path"]["wysiwyg"] . 'editornewsletter.php');
$form->add(i18n("HTML message"), $content);

Dann in der Datei contenido/classes/class.newletter.php

Nach folgender Zeile (242)

Code: Alles auswählen

$message = $this->get("message");
folgende einfügen:

Code: Alles auswählen

$messageHTML = $this->get("messageHTML");

Nach folgender Zeile (254)

Code: Alles auswählen

$message = str_replace("MAIL_TIME", "$time", $message);
folgende Zeilen einfügen (in der letzten Zeile des neuen codes müsst Ihr noch euer gewünschtes CSS-File angeben, welches Ihr im Newsletter verwenden wollt):

Code: Alles auswählen

$messageHTML = str_replace("MAIL_NUMBER", "$recipientcount", $messageHTML);
$messageHTML = str_replace("MAIL_DATE", "$dateday", $messageHTML);
$messageHTML = str_replace("MAIL_TIME", "$time", $messageHTML);
$messageHTML = str_replace("\"upload", "\"".$cfgClient[$client]["htmlpath"]["frontend"]."/upload", $messageHTML);
$messageHTML = "<body><head><link type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/editor_style.css\" /></head><body>".$messageHTML;

Folgende Zeilen (298 - 310)

Code: Alles auswählen

                        $mail      = new phpmailer();
                        $mail->From   = $from;
                              $mail->FromName = $from;
                              $mail->AddAddress($to);
                        $mail->Mailer   = "mail";
                        $mail->Subject   = $subject;
                        $mail->Body   = $message2."\n\n".$foot;
                        // $mail->AltBody  = $body;
                        if (!$mail->Send()) {
                           $result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
                        } else {
                           $result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
                        }
ersetzen durch:

Code: Alles auswählen

                        $messageHTML2 = str_replace("MAIL_NAME", "$name", $messageHTML);
                        $messageHTML2 = str_replace("MAIL_UNSUBSCRIBE", "<a href=\"".$path."unsubscribe=".$key."\">".$path."unsubscribe=".$key."</a>", $messageHTML2);
                        $messageHTML2 = str_replace("MAIL_CHANGE", "<a href=\"".$path."change=".$key."\">".$path."change=".$key."</a>", $messageHTML2);
                        $messageHTML2 = str_replace("MAIL_STOP", "<a href=\"".$path."stop=".$key."\">".$path."stop=".$key."</a>", $messageHTML2);
                        $messageHTML2 = str_replace("MAIL_GOON", "<a href=\"".$path."goon=".$key."\">".$path."goon=".$key."</a>", $messageHTML2);

                        $boundary = md5(uniqid(time()));

	                      $headers  = 'From: ' . $from . "\n";
	                      $headers .= 'To: ' . $to . "\n";
	                      $headers .= 'Return-Path: ' . $from . "\n";
	                      $headers .= 'MIME-Version: 1.0' ."\n";
	                      $headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\n\n";
	                      $headers .= $message2."\n\n".$foot . "\n";
	                      $headers .= '--' . $boundary . "\n";
	                      $headers .= 'Content-Type: text/plain; charset=ISO-8859-1' ."\n";
	                      $headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
	                      $headers .= $message2."\n\n".$foot . "\n";
	                      $headers .= '--' . $boundary . "\n";
	                      $headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' ."\n";
	                      $headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
	                      $headers .= $messageHTML2."<p>".$foot."</p></body></html>\n";
	                      $headers .= '--' . $boundary . "--\n";

	                      $mailOk=mail('', $subject,'', $headers);

                        if ($mailOk) {
                           $result[] = $name . " (" . $to . "): " . i18n("Sent successfully");
                        } else {
                           $result[] = $name . " (" . $to . "): " . sprintf(i18n("Newsletter to %s could not be sent"), $to);
                        }
Ich habe es leider nicht fertig gebracht das mail über die phpmailer-klasse zu senden, da der Header recht kompliziert ist, aber wäre natürlich schöner...


Dann muss im Verzeichnis contenido/external/wysiwyg/tinymce2 eine Datei namens editornewsletter.php mit folgendem Inhalt erstellt werden:

Code: Alles auswählen

<?php
// ================================================
// TINYMCE 1.45rc1 PHP WYSIWYG editor control
// used for the HTML Newsletter
// ================================================
// Main editor file for CONTENIDO
// ================================================
//								  www.dayside.net
// ================================================
// Author: Martin Horwath, horwath@dayside.net
// Modified by: Simon Käser raptus.com
// TINYMCE 1.45rc1 Fileversion , 2005-06-10 v0.0.3
// ================================================



// include editor config/combat file
include (dirname(__FILE__).DIRECTORY_SEPARATOR."config.php"); // CONTENIDO
cInclude("external", "wysiwyg/tinymce2/editorclass.php");



// name of textarea element
$editor_name = "messageHTML";

$editor_content = htmlspecialchars($editor_content);

$cTinyMCEEditor = new cTinyMCEEditor($editor_name, $editor_content);

$currentuser = new User;
$currentuser->loadUserByUserID($auth->auth["uid"]);

if ($currentuser->getField("wysi") == 1)
{
	$content = $cTinyMCEEditor->getScripts();
	$content.= $cTinyMCEEditor->getEditor();
}
?>

Damit die Übersetzung funktioniert müssen in der Datei contenido/locale/de_DE/LC_MESSAGES/contenido.po folgende Zeilen hinzugefügt werden:

Code: Alles auswählen

#: contenido/includes/include.newsletter_edit.php:133
msgid "HTML message"
msgstr "HTML Nachricht"

Das ganze habe ich nur mit der Version 4.6.0 getestet.

Viel Spass postet bitte Bugs oder Verbesserungsvorschläge.

Verfasst: Mi 2. Nov 2005, 15:24
von HerrB
Na, da hast Du mir ja schon mal eine Menge Arbeit abgenommen, danke. Sofern ich die Zeit dafür finde, gucke ich mir das am Wochenende mal an.

Kleiner Hinweis: Bitte nur einsetzen, wenn man es wirklich benötigt, da sich die endgültige Lösung natürlich unterscheiden kann (insbesondere bei der Datenbankänderung).

Gruß
HerrB

Verfasst: Mo 14. Nov 2005, 15:36
von komo
Das Teil funktioniert super, allerdings bekomme ich beim erstellen bzw editieren folgende fehlermeldung


Warning: strpos(): Offset not contained in string. in /var/www/web4/html/contenido/includes/functions.i18n.php on line 134

und weiß damit leider nichts anzufangen

Verfasst: Mo 14. Nov 2005, 17:00
von HerrB
Hast Du die Änderung mit der .po-Datei gemacht?

Ansonsten könntest Du mal versuchen, diesen Code zu ersetzen:
Alt:

Code: Alles auswählen

$form->add(i18n("HTML message"), $content);
Neu:

Code: Alles auswählen

$form->add("HTML message", $content);
Das ist aber nur ein Workaround - da steht dann "HTML message" im Backend.

Gruß
HerrB

Verfasst: Do 24. Nov 2005, 19:23
von visionary
hallo habe den html newsletter unter 4.5.3 eingebaut
und er arbeitet fehlerfrei

Bild

Verfasst: Mi 21. Dez 2005, 14:00
von raum-acht
funktioniert wirklich gut!
tolle arbeit...

leider wird der absolute pfad zum css nicht ausgelesen.
gibt es eine lösung dafür oder muss ich die styles inline definieren?

des weiteren bleibt das text-eingabe-feld über dem wysiwyg-editor bestehen.
ist das so gewollt?

danke!
philipp[/img]

Verfasst: Mi 21. Dez 2005, 14:24
von simu
des weiteren bleibt das text-eingabe-feld über dem wysiwyg-editor bestehen.
ist das so gewollt?
das ist absicht, das script schickt eine HTML und Text-Version im selben eMail, der Empfänger sieht dann je nach seinen Einstellungen die HTML oder die Text-Version...
leider wird der absolute pfad zum css nicht ausgelesen.
gibt es eine lösung dafür oder muss ich die styles inline definieren?
damit das richtige css-file included wird musst du folgende Zeile anpassen:

Code: Alles auswählen

$messageHTML = "<body><head><link type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/editor_style.css\" /></head><body>".$messageHTML;
wahrscheinlich musst du nur "editor_style.css" durch deinen css-file-namen ersetzten, der Pfad zeigt auf das "css"-Verzeichnis im frontend...

nur text???

Verfasst: Mi 21. Dez 2005, 17:48
von hypekermit
hallo habe alles eingebaut wie beschrieben funktioniert super...
super gemacht :o)

jedoch kommt nur eine textmail an ohne html...

andere html emails kann ich empfangen ???

idee??

Verfasst: Mi 21. Dez 2005, 18:22
von simu
jedoch kommt nur eine textmail an ohne html...
mit welchem email-client rufst du deine emails ab? schau mal unter Ansicht > Nachrichtentext... und versuche da auf HTML umzuschalten...

email client

Verfasst: Mi 21. Dez 2005, 18:27
von hypekermit
ich benutze tobit..

andere html emails werden mir angezeigt...

in der datenbank steht auch der eintrag drin!

Verfasst: Do 22. Dez 2005, 12:57
von raum-acht
damit das richtige css-file included wird musst du folgende Zeile anpassen:
das bedeutet doch aber nur das ich beim wysiwyg-editor die styles anwenden kann - jedoch nicht das beim empfänger die styles die als "class=" definiert werden angewendet werden - oder?

momentan habe ich die styles inline als "style=" definiert.

ich glaube nicht das der absolute pfad zum .css im head vom e-mail client beachtet wird - oder doch?

danke - philipp

Verfasst: Mo 6. Feb 2006, 16:49
von malsdgtac
Ist das der letzte Stand bezüglich HTML-Newsletter - oder gibt es schon neuere Threads dazu?

Verfasst: Mo 6. Feb 2006, 18:29
von HerrB
Ist der letzte Stand. Ist in Arbeit.

Gruß
HerrB

Verfasst: Di 7. Feb 2006, 16:02
von malsdgtac
Also ich habe den Newsletter gerade eingebaut, und so auf den ersten Blick funktioniert der wirklich super!!! - danke für das Teil.

Zwei Kleinigkeiten sind mir aufgefallen, eine davon düfte für das oben genannte Problem beim CSS schuld sein.

Der Code

Code: Alles auswählen

$messageHTML = "<body><head><link type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/editor_style.css\" /></head><body>".$messageHTML;
muss so lauten:

Code: Alles auswählen

$messageHTML = "<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".$cfgClient[$client]["htmlpath"]["frontend"]."/css/editor_style.css\" /></head><body>".$messageHTML;
1. Änderung - das erste <body> zu <html>
2. Änderung - Ergänzugn von rel=\"stylesheet\" - dann funktioniert auch das CSS

Verfasst: Di 14. Feb 2006, 12:10
von stefkey
Hallo,

ist es möglich den Newsletter mit einem Real Name als Absender zu versenden, d.h. das der Empfänger nicht nur die Email-Adresse angezeigt bekommt sondern auch einen normalen Namen.

Was müsste man wo im Coder ändern?


Danke
stefkey