thomas hirt . visuelle kommunikation
Einrichtung eines Newsletters mit Direct Mail
Illustration für den attac Jahresbericht
 
Donnerstag, 22. Jan 2009

Direct Mail optimieren und Analyse der nicht zustellbaren Emails aktivieren

Wie versprochen möchte ich in diesem Beitrag ein paar zusätzliche Einstellungen für die Erweiterung Direct Mail beschreiben und versuchen zu erklären, wie ich mit der Erweiterung SL direct_mail Return die Analyse der nicht zustellbaren Emails aktiviert habe.

HTML Emails als Standard Einstellung festlegen

Mit ein paar wenigen Typoscript Zeilen ist es möglich festzulegen, dass jede neue Anmeldung für den Newsletter automatisch HTML-Emails im Benutzerprofil aktviert hat. Das ist vor allem interessant, wenn man die Checkbox "HTML-Email" aus der Standardvorlage von Direct Mail Subscription weglassen möchte.

plugin.feadmin.dmailsubscription{
    table=tt_address
    create.overrideValues.disable = 1
    create.overrideValues.module_sys_dmail_html = 1
}

Diese Einstellungen werden in das Setup Feld des Haupttemplates geschrieben.

Zusätzliche Felder für das Anmeldeformular erstellen

Die Felder des Anmeldeformulars können nach belieben mit allen Einträgen eines tt_address Records erweitert werden. Um herauszufinden wie das jeweilige Felder in der Datenbank bezeichnet wird, sieht man am besten via phpMyAdmin in der Tabelle "tt_address" nach.

Als nächstes muss man sowohl das HTML-Template der Anmeldung anpassen, als auch ein wenig Typoscript Code einfügen. Handelt es sich um kein Pflichtfeld, reicht es das HTML-Template folgendermaßen zu erweitern

<span class="dm-subscription-label">Titel (optional):</span>
<input type="text" name="FE[tt_address][title]" class="dm-subscription-input-text">

Will man hingegen ein Plichtfeld inklusive Fehlermeldung einfügen wird folgender Block benutzt und angepasst:

<span class="dm-subscription-label">Ihr Vorname:</span>
<!--###SUB_REQUIRED_FIELD_first_name### begin -->
    <span class="dm-subscription-error_msg">Bitte f&uuml;llen Sie dieses Pflichtfeld aus!</span><br />
<!--###SUB_REQUIRED_FIELD_first_name### end -->
<input type="text" name="FE[tt_address][first_name]" class="dm-subscription-input-text">

 Jedes neue Feld wird mit folgendem Typoscript Code im Setup des Haupttemplates aktiviert:

plugin.feadmin.dmailsubscription.edit.fields = title, first_name, last_name, email, module_sys_dmail_html, hidden
plugin.feadmin.dmailsubscription.create.fields = title, first_name, last_name, email, module_sys_dmail_html, hidden

Wichtig dabei ist es das Feld "hidden" nicht auszulassen. Ohne diesem Feld funktioniert die Registrierung nicht.
Die weiteren Feldnamen können in dieser Liste einfach hinzugefügt werden.

Pflichtfelder benötigen noch zusätzlich folgenden Code:

plugin.feadmin.dmailsubscription.edit.required = first_name, last_name, email
plugin.feadmin.dmailsubscription.create.required = first_name, last_name, email

Analyse der nicht zustellbaren Emails aktivieren

Um nicht zustellbare Mails zu verarbeiten benötigt die Extension Direct Mail eine Applikation die ein POP Email Konto abfragen kann und die dort enthaltenen Nachrichten zur Verarbeitung weiterleitet. Die Entwickler von Direct Mail empfehlen dafür fetchmail. Da ich fetchmail nicht auf dem Server installieren wollte, habe ich es mit der Erweiterung SL direct_mail Return versucht. Leider hat bei mir die Installation nur geklappt nachdem ich den Source Code der Erweiterung angepasst hatte.

Damit das "bouncing" funktioniert benötigt man einen IMAP oder POP Emailaccount (z.B. bounces@meinewebseite.at).
Folgende Daten benötigt man griffbereit um die Erweiterung zu installieren:

  • Email Account type: POP oder IMAP
  • Email host (z.B. mail.meinewebseite.at)
  • Benutzername
  • Kennwort

Danach kann SL direct_mail Return wie gewöhnlich über den Extension Manager importiert und installiert werden.
Die oben erwähnten Daten werden im Zuge der Installation eingegeben.

Im Konfigurations Modul von Direct Mail muss nun die Bounce Emailadresse
(z.B.: bounces@meinewebseite.at) eingegeben werden:

Danach muss ein Cronjob eingestellt werden der folgende Datei in regelmäßigen abständen aufruft:
www.mainewebseite.at/typo3conf/ext/sl_direct_mail_return/scripts/returnmail.phpsh
Ein Cronjob ist nichts anderes als ein periodisch widerholter automatisierter Aufruf einer bestimmten URL.
Einrichten kann man Cronjobs sehr einfach auf folgender Seite: www.cronjob.de

Zu Testzwecken habe ich den Dateinamen von "returnmail.phpsh"auf "returnmail.php" geändert und die Datei danach manuell aufgerufen. Hier bekam ich nur mehr Fehlermeldungen die auf nicht korrekte Pfadangaben zurückzuführen waren. Da ich keinen anderen Ausweg wusste, habe ich den Quellkode dieser Datei probeweise modifiziert und siehe da es hat geklappt. Anbei meine modifizierte Version von returnmail.phpsh

Grundsätzlich habe ich an 4 Stellen diverse Pfade korrigiert. Nicht besonders schön, aber in meinem Fall funktioniert es. Ich habe die geänderten Stellen mit Kommentaren versehen und den Originalkode auskommentiert. Falls du diese Datei in deinem Projekt nutzen willst, kopiere sie in das oben erwähnte Verzeichnis und ändere den Namen zuerst einmal auf "returnmail.php". Rufe die Datei mit einem beliebigen Webbrowser auf und sieh nach, ob PHP Fehlermeldungen auftauchen. Im schlimmsten Fall musst du an den 4 von mir markierten Stellen die Pfade ein wenig anpassen. Nachdem die Datei funktioniert, kann der Name wieder auf "returnmail.phpsh" abgewandelt werden. Der Cronjob ruf jetzt in regelmäßigen Abständen die Datei auf und die nicht zustellbaren Mails werden verarbeitet. Diese Tatsache sollte man an der Statistik für nicht zustellbare Mails im Direct Mail Modul überprüfen können.

Für Fragen oder Anregungen bin ich jederzeit bereit...

 
 
http://www.muc-cms.deBenjamin schrieb am 8.9.10, 15:31
Hallo Tom,

vielen Dank für diese Anleitung, bin Schritt für Schritt ab "Analyse der nicht zustellbaren Emails aktivieren" durchgegangen und es funktioniert (nachdem ich die Pfade in returnmail.phpsh an den von Dir markierten Stellen entsprechend unserer TYPO3-Installation angepasst habe)!
Eine Frage: Im neuen Postfach der Adresse bounce@ sammeln sich bei jedem Newsletter-Versand die Return-Mails. Sollten diese nicht nach jedem Versand mit anschließendem Laufenlassen des Cronjobs gelöscht werden, weil es sonst sein könnte, dass beim nächsten Newsletterversand Return-Mails "ausgelesen" werden, die nach zwischenzeitiger Empfängerbereinigung gar nicht mehr existieren?

Grüße,
Benjamin
www.thomas-hirt.atThomas schrieb am 8.9.10, 22:16
Ich denke mal, dass alle Mails nur ein einziges mal ausgelesen werden. Was ich nicht weiß, ob die bereits verarbeiteten Mails auch gelöscht werden. Müsste man mal ausprobieren.
http://www.muc-cms.deBenjamin schrieb am 9.9.10, 13:08
Habe es mehrfach getestet: Die Mails werden nach dem Auslesen aus dem Postfach gelöscht, sehr praktisch.
www.headhunter-rockt.deMartin schrieb am 15.6.11, 17:47
Ich check das irgendwie nicht. Hab keine Ahnung von PHP und weiß daher nicht so genau, was nun wirklich an den 4 Stellen einzutragen ist (nur Pfad? Pfad und Dateinamen??) ist. Hast Du irgendwo eine Beispieldatei ohne Platzhalter? Und wie würde sich die Webpage verhalten, wenn ich im Browser die return.php direkt aufrufe? bei mir bleibt da alles weiß. Freu mich auf Deine Hilfe. Grüße Martin
www.ihr-layout.euMichael Müller schrieb am 24.9.12, 08:24
Hallo,
der eintrag ist schon etwas alt, aber anbei die richtige php einstellung.

Ganz oben den ab dem letzten */ bis require_once(PATH_t3lib.'class.t3lib_div.php'); folgendes komplett ersetzen

***
error_reporting (E_ALL ^ E_NOTICE);

define('TYPO3_OS', (stristr(PHP_OS,'win') && !stristr(PHP_OS,'darwin')) ? 'WIN' : '');

if (!defined('PATH_thisScript')) define('PATH_thisScript',str_replace('//','/', str_replace('\\','/', (php_sapi_name()=='cgi'||php_sapi_name()=='xcgi'||php_sapi_name()=='isapi'
[gehört in die obere Zeile] ||php_sapi_name()=='cgi-fcgi')&&((!empty($_SERVER['ORIG_PATH_TRANSLATED'])&&isset($_SERVER['ORIG_PATH_TRANSLATED']))?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED'])?
[gehört in die obere Zeile] ((!empty($_SERVER['ORIG_PATH_TRANSLATED'])&&isset($_SERVER['ORIG_PATH_TRANSLATED']))
[gehört in die obere Zeile] ?$_SERVER['ORIG_PATH_TRANSLATED']:$_SERVER['PATH_TRANSLATED']):
[gehört in die obere Zeile] ((!empty($_SERVER['ORIG_SCRIPT_FILENAME'])&&isset($_SERVER['ORIG_SCRIPT_FILENAME']))?
[gehört in die obere Zeile] $_SERVER['ORIG_SCRIPT_FILENAME']:$_SERVER['SCRIPT_FILENAME']))));

if (!defined('PATH_site')) define('PATH_site', dirname(dirname(dirname(dirname(dirname(PATH_thisScript))))).'/');
if (!defined('PATH_t3lib')) define('PATH_t3lib', PATH_site.'t3lib/');
define('PATH_typo3conf', PATH_site.'typo3conf/');
define('TYPO3_mainDir', 'typo3/');
if (!defined('PATH_typo3')) define('PATH_typo3', PATH_site.TYPO3_mainDir);
if (!defined('PATH_tslib')) {
if (@is_dir(PATH_site.'typo3/sysext/cms/tslib/')) {
define('PATH_tslib', PATH_site.'typo3/sysext/cms/tslib/');
} elseif (@is_dir(PATH_site.'tslib/')) {
define('PATH_tslib', PATH_site.'tslib/');
}
}
define('TYPO3_MODE', 'BE');
***

Dann passt der Pfad auch!
Grüße Michael
www.thomas-hirt.atThomas Hirt schrieb am 24.9.12, 12:02
Danke Michael für den Tipp!
 
 
kalender
Januar 2009
M D M D F S S
« Dez   Feb »
 1234
567891011
12131415161718
19202122232425
262728293031