Newsletter mit HTML Funktionalität

simu
Beiträge: 48
Registriert: Di 4. Okt 2005, 08:44
Wohnort: Schweiz
Kontaktdaten:

Newsletter mit HTML Funktionalität

Beitrag von simu » Mi 2. Nov 2005, 10:00

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.

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

Beitrag von HerrB » Mi 2. Nov 2005, 15:24

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

komo
Beiträge: 92
Registriert: Mi 9. Mär 2005, 20:38
Kontaktdaten:

Beitrag von komo » Mo 14. Nov 2005, 15:36

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

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

Beitrag von HerrB » Mo 14. Nov 2005, 17:00

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

visionary
Beiträge: 43
Registriert: Di 4. Okt 2005, 22:57
Kontaktdaten:

Beitrag von visionary » Do 24. Nov 2005, 19:23

hallo habe den html newsletter unter 4.5.3 eingebaut
und er arbeitet fehlerfrei

Bild

raum-acht
Beiträge: 28
Registriert: Do 3. Nov 2005, 18:40
Kontaktdaten:

Beitrag von raum-acht » Mi 21. Dez 2005, 14:00

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]

simu
Beiträge: 48
Registriert: Di 4. Okt 2005, 08:44
Wohnort: Schweiz
Kontaktdaten:

Beitrag von simu » Mi 21. Dez 2005, 14:24

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...

hypekermit
Beiträge: 213
Registriert: Mi 9. Okt 2002, 21:24
Kontaktdaten:

nur text???

Beitrag von hypekermit » Mi 21. Dez 2005, 17:48

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??

simu
Beiträge: 48
Registriert: Di 4. Okt 2005, 08:44
Wohnort: Schweiz
Kontaktdaten:

Beitrag von simu » Mi 21. Dez 2005, 18:22

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...

hypekermit
Beiträge: 213
Registriert: Mi 9. Okt 2002, 21:24
Kontaktdaten:

email client

Beitrag von hypekermit » Mi 21. Dez 2005, 18:27

ich benutze tobit..

andere html emails werden mir angezeigt...

in der datenbank steht auch der eintrag drin!

raum-acht
Beiträge: 28
Registriert: Do 3. Nov 2005, 18:40
Kontaktdaten:

Beitrag von raum-acht » Do 22. Dez 2005, 12:57

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

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Mo 6. Feb 2006, 16:49

Ist das der letzte Stand bezüglich HTML-Newsletter - oder gibt es schon neuere Threads dazu?

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

Beitrag von HerrB » Mo 6. Feb 2006, 18:29

Ist der letzte Stand. Ist in Arbeit.

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

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Di 7. Feb 2006, 16:02

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

stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Beitrag von stefkey » Di 14. Feb 2006, 12:10

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

Gesperrt