Inhalt

  1. Projekt-Infos
  2. Häufig gestellte Fragen (FAQ)
  3. Bekannte Fehler

 

I. Projekt-Infos

Projekt:   Jax Newsletter (Programm zur Online-Verwaltung von Mailinglisten)
     
File:   jax_newsletter.php
     
Version:   1.4 (mit optionaler MySQL-Datenbankunterstützung)
     
Interpreter:      PHP 4.02+, 4.1+ (ready for register_globals=off)
     
Code:   Andreas John
     
Design:   Andreas John
     
Homepage:   www.jtr.de/scripting/php/newsletter
     
Lizenz:  

Copyright (C) 2001-2002, Andreas John (Jack (tR))

Dieses Programm unterliegt der "General Public License" in der Version 2 oder neuer! Den genauen Wortlaut dieser Lizenz finden Sie in der beiliegenden Datei gpl.txt, bzw. auf der Website der Free Software Foundation unter http://www.fsf.org/copyleft/gpl.html

Bitte beachten Sie, dass ich keinerlei Haftung für Schäden übernehmen kann, die im Zusammenhang mit der Anwendung dieser Software auftreten...

 

Credits:  

Mein persönliches Dankeschön vor allem an:

Martin Sondermann
http://www.kunstphotografie.de
für seine persönliche Unterstützung
   

Wojciech Dorosz
http://www.serwisy.net

für die polnischen Sprachvorlagen
   

Tamas Herczeg
http://www.soft-trans.hu

für die ungarischen Sprachvorlagen
   

Jan-Ruben van Schie
http://www.jrwebdsign.nl

für die Holländischen Sprachvorlagen
   

Giovanni Scopel [skop@keymail.net]

für die Italienischen Sprachvorlagen

 

II. Häufig gestellte Fragen (FAQ):

  1. Was ist Jax Newsletter ? Wozu brauche ich das Programm ?

    1. 1. Funktionsweise des Skripte

  2. Wie installiere ich Jax Newsletter auf meiner Website (ohne MySQL) ?

  3. Wie kann ich Jax Newsletter mit MySQL benutzen?

  4. Wie viele Einträge kann Jax Newsletter verwalten?

  5. Kann Jax Newsletter mehrere Mailinglisten gleichzeitig verwalten?

  6. Wie kann ich noch mehr Daten vom Benutzer erfassen?

  7. Wie bleibe ich auf dem laufenden über neue Updates?

 

1. Was ist Jax Newsletter ? Wozu brauche ich das Programm ?

Jax Newsletter ist ein Skript, mit dem Sie direkt auf Ihrer Website Mailinglisten erstellen, verwalten und e-mails an diese Listen versenden können. (Mailinglist Manager)

Darüber hinaus bietet Ihnen Jax Newsletter zur Zeit folgende Leistungsmerkmale:

 

 

Funktionsweise der Skripte

 

Die Mailingliste funktioniert (standardmäßig) folgendermaßen:

 

1. Aufruf des Skriptes

Das Startskript heißt jax_newsletter.php und kann mit folgenden Parametern aufgerufen werden.

 

Beispiel:

http://..../jax_newsletter.php?ml_id=1&language=English

ml_id gibt die zu verwendende Mailingliste an. Wenn Sie keinen Parameter angeben, wird ml_id=0 voreingestellt.

 

Im folgenden gehen wir davon aus, dass Sie zwei Mailinglisten verwalten möchten. Eine Gruppe (ml_id=1) für alle Englischsprachigen Empfänger, und eine Gruppe (ml_id=0) für alle Deutschsprachigen Empfänger...

 

Wenn Sie den Parameter ml_id angeben, müssen Sie zuvor globals.inc.php entsprechend anpassen
(siehe --> Kann Jax Newsletter mehrere Mailinglisten verwalten? )

language gibt die zu verwendende Sprachvorlage an.
Wenn Sie einen Parameter angeben, stellen Sie sicher, dass eine entsprechende Vorlagendatei im Verzeichnis language existiert

jax_newsletter.php führt den Besucher zu zwei Webseiten, auf denen sich der Besucher per Formular in die Mailingliste ein- (sign_in.php) oder austragen (sign_out.php) kann. Alternativ können Sie auch das vorgefertigte Formular sign_in_out.php verwenden, in dem das An- und Abmeldeformular zusammengefasst wurden. Die Parameter sind ansonsten identisch mit dem Aufruf von jax_newsletter.php...

Sie können die Formulare natürlich auch direkt in Ihre Webseiten einbauen...

 

2. An- / Abmeldevorgang

Trägt sich ein Besucher in eine Mailingliste ein oder aus, werden die eingegebenen Daten in einer Protokolldatei (standardmäßig bei beiden Mailinglisten in der Datei records.csv) gespeichert. Ausserdem wird ein "pseudo-zufällig" generierter Schlüssel zusammen mit der e-mail-Adresse in der Datei subscribers.csv gespeichert.

Um sicherzustellen, dass niemand unerwünscht die e-mail-Adresse eines anderen in die Liste einträgt, bzw. aus der Liste austrägt, bekommt der "Eigentümer" der e-mail-Adresse nach der Anmeldung durch das Skript sign.php eine e-mail zugeschickt. Diese e-mail enthält einen Hyperlink auf das Skript verify.php, den der Empfänger anklicken muß, um sich entgültig in die entsprechende Mailingliste ein- oder auszutragen:

 

Beispiel:

http://.../newsletter/verify.php?language=German&ml_id=0&do=sign&uid=3et60c4i45....

do gibt an, ob sich der Benutzer ein oder austrägt.

uid enthält den von sign.php erzeugten Schlüssel, den verify.php jetzt mit den Schlüsseln in der Datei subscribers.csv vergleicht. Ist der Vergleich erfolgreich, wird der entsprechende Eintrag in der Datei subscribers.csv gelöscht und die e-mail-Adresse in die Mailingliste (mailinglist_ger.csv bzw. mailinglist_eng.csv) übernommen, bzw. gelöscht...

 

3. Verwaltung der Mailingliste / Manuelles Änderung von Einträge

Möchten Sie Benutzer von Hand aus der Mailingliste löschen, steht Ihnen dazu das Script list.admin.php im Verzeichnis admin zur Verfügung. Um es zu benutzen rufen Sie am besten das Skript index.php im gleichen Verzeichnis auf!

Beispiel:

http://..../admin/index.php?language=German


4. Senden von Nachrichten an die Mailingliste

Um eine Nachricht an die Mailingliste zu schicken, rufen Sie das Skript posting.php (am besten auch über index.php) auf. Wählen Sie die Empfängergruppe aus, Geben Sie die Nachricht ein und drücken Sie dann auf Senden.

Wichtig:

Damit das Skript alle Nachrichten verschicken kann, muß die Browserverbindung "offen" gehalten werden. Sie dürfen also das Browserfenster erst schließen, wenn Sie eine Bestätigungsemail erhalten, dass alle e-mails erfolgreich verschickt wurden!

 

 

2. Wie installiere ich Jax Newsletter auf meiner Website? (ohne MySQL)

Jax Newsletter wurde in der Skriptsprache PHP 4 geschrieben und setzt PHP - eine serverseitige Programmiersprache, mit der man dynamisch erzeugte Webseiten erstellen kann - voraus!

(Fragen Sie ggfs. Ihren Web-Provider nach PHP-Unterstützung!)

Jax Newsletter läuft auch ohne MySQL-Unterstützung!

Verfügen Sie bereits über PHP-Unterstützung, dann tun Sie einfach folgendes:

  1. Besorgen Sie sich die aktuellste Version von Jax Newsletter unter http:/www.jtr.de/scripting/php/newsletter/ !

  2. Entpacken Sie das Archiv!

  3. Öffnen Sie mit einem Texteditor die Datei globals.inc.php (im Verzeichnis newsletter) und passen Sie die Einträge Ihren Bedürfnissen an!

  4. Laden Sie das Newsletter-Skript auf Ihre Website!

    Nachdem Sie das Skript auf Ihren Webspace hochgeladen haben, stellen Sie die Zugriffsrechte für die CSV-Dateien (standardmäßig "mailinglist_eng.csv", "mailinglist_ger.csv" (die Mailinglisten), "records.csv" (die protokollierten Anmeldedaten), "subscribers.csv" (Datei mit den Neuanmeldungen) so ein, dass die Skripte darauf vollen Zugriff haben! Sonst meldet Ihnen das Skript den Fehler "Error: Couldn't open ...."

    (Am besten Sie ändern später die Dateinamen und die dazugehörigen Einstellungen in globals.inc.php)

  5. Vergessen Sie nicht, das Skript auf Ihrer Website zu verlinken! ;-)
    Viel Spaß!

  6. Wichtiger Hinweis zur Sicherheit:
    Stellen Sie über die Konfigurationsmöglichkeiten Ihres Webservers sicher, dass niemand ausser Ihnen Zugriff auf die Skripte im Verzeichnis admin hat.

    (Beim Apache Webserver können Sie z.B. einzelne Verzeichnisse durch die Datei .htaccess gegen unerlaubte Zugriffe schützen). Stellen Sie ausserdem sicher, dass das der Verzeichnisindex nicht angezeigt wird... (Nehmen Sie am besten einfach die Beispieldatei _htaccess und benennen Sie sie auf Ihrem Webserver in .htaccess um !)

 

3. Wie kann ich Jax Newsletter mit MySQL benutzen?

Jax Newsletter wurde so entworfen, dass es sowohl einfache Textdateien, als auch MySQL-Datenbanktabellen zur Speicherung der Einträge verwenden kann. Die Verwendung der MySQL-Datenbank ist bei großen Mailinglisten mit vielen Einträgen in der Regel schneller als die CSV-Variante...

Verfügen Sie über MySQL-Unterstützung dann tun Sie folgendes:

  1. Installieren Sie Jax Newsletter (siehe "Wie installiere ich Jax Newsletter auf meiner Website?")...

  2. Ändern Sie die folgende Einträge in der Datei globals.inc.php !

    $newsletters[0]->db_server = "http://...";
    $newsletters[0]->db_login = "...";
    $newsletters[0]->db_database = "...";
    $newsletters[0]->db_password = "...";

  3. Setzen $newsletter[0]->data_source = "mysql" !

  4. Starten Sie phpMyAdmin (oder das entsprechende Monitorprogramm für Ihren MySQL-Server) und legen Sie die folgende Tabellenstruktur in der unter db_database angegebenen Datenbank an. MySQL-Schema:

    CREATE TABLE mailinglist_ger (
      id int(16) NOT NULL auto_increment,
      username varchar(64) NOT NULL default '',
      domain varchar(64) NOT NULL default '',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;
    
    
    CREATE TABLE records (
      id int(16) NOT NULL auto_increment,
      action char(1) NOT NULL default '',
      time datetime NOT NULL default '0000-00-00 00:00:00',
      ip varchar(15) NOT NULL default '',
      email varchar(128) NOT NULL default '',
      profession varchar(128) NOT NULL default '',
      age year(4) NOT NULL default '0000',
      nationality varchar(64) NOT NULL default '',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;
    
    
    CREATE TABLE subscribers (
      id int(16) NOT NULL auto_increment,
      date date NOT NULL default '0000-00-00',
      hash varchar(32) NOT NULL default '',
      email varchar(128) NOT NULL default '',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;
    
    
    CREATE TABLE archive_ger (
      id int(11) NOT NULL auto_increment,
      date date NOT NULL default '0000-00-00',
      time time NOT NULL default '00:00:00',
      title varchar(80) NOT NULL default '',
      content_file varchar(100) NOT NULL default '',
      PRIMARY KEY  (id)
    ) TYPE=MyISAM;
    
    
    *Die Tabellennamen müssen die gleichen sein, die in der Datei 
    globals.inc.php festgelegt sind...
  5. Wichtiger Hinweis:
    Stellen Sie über die Konfigurationsmöglichkeiten Ihres Webservers sicher, dass niemand ausser Ihnen Zugriff auf die Skripte im Verzeichnis admin hat, da sonst Ihre MySQL-Datenbank kompromitiert ist.

    (Beim Apache Webserver können Sie z.B. einzelne Verzeichnisse durch die Datei .htaccess gegen unerlaubte Zugriffe schützen)

 

4. Wie viele Einträge kann Jax Newsletter speichern?

Getestet habe ich das Skript nur mit einer kleinen, realistischen Menge von Einträgen (ca.2000 Einträge im CSV-Format). Theoretisch müsste das Skript (je nach verfügbarer Rechenzeit/-leistung und Datenquelle) problemlos mehrere 1000 Einträge verwalten können. Für größere Mailinglisten bietet sich die Verwendung von MySQL als Datenquelle an.

 

5. Kann Jax Newsletter mehrere Mailinglisten gleichzeitig verwalten?

Kein Problem! :-)
Möchten Sie mehr als einen Newsletter über das Skript "versorgen", gibt es zwei Möglichkeiten:

Entweder:

Sie legen für jeden Newsletter ein separates Verzeichnis mit einem separaten Skript an. Diese Möglichkeit kann bei mehreren Newslettern schnell unübersichtlich werden.

Oder:

Sie rufen das Newsletterskript mit dem Parameter ml_id auf. z.B:

http://../jax_newsletter.php?ml_id=1

Aus Sicherheitsgründen kann der Dateiname der Mailinglist nicht direkt mit der URL weitergegeben werden.
Die Zuordnung zwischen Mailinglist-ID und Mailinglist müssen Sie (zur Zeit) per Hand in der Datei globals.inc.php vornehmen:

...

// Titel des Newsletters
$newsletters[0]->title = "Jax Newsletter (English)";
$newsletters[0]->data_source = "csvfile";

// CSS template for the Newsletter
$newsletters[0]->css = "styles/default.css";
$newsletters[0]->do_log = true;
$newsletters[0]->logfile = "records.csv";
$newsletters[0]->subscriberlist = "subscribers.csv";
$newsletters[0]->mailinglist = "mailinglist_eng.csv";
$newsletters[0]->archive = "archive_ger.csv";
$newsletters[0]->db_server = "";
$newsletters[0]->db_login = "";
$newsletters[0]->db_database = "";
$newsletters[0]->db_password = "";

$newsletters[1]->title = "Jax Newsletter (German)";
$newsletters[1]->data_source = "mysql";
$newsletters[1]->css = "styles/default.css";
$newsletters[1]->do_log = true;
$newsletters[1]->logfile = "records";
$newsletters[1]->subscriberlist = "subscriberlist";
$newsletters[1]->mailinglist = "mailinglist";
$newsletters[1]->archive = "archive_eng.csv";
$newsletters[1]->db_server = "mysql9.webpack.hosteurope.de";
$newsletters[1]->db_login = "ftp19399";
$newsletters[1]->db_database = "mailinglist_de";
$newsletters[1]->db_password = "banana";

...

Im Beispiel wird eine weitere Mailingliste mit dem selben Skript benutzt::

Die zweite Mailingliste (für die Englischen Empfänger) wird auf einem mysql-Datenbankserver abgelegt. Sie ist damit über die URL http://../jax_newsletter.php?ml_id=1 erreichbar

Äquivalent würde mit der URL http://../jax_newsletter?ml_id=2 eine dritte Mailinglistendatei zur Speicherung verwendet usw...

Sie können für jede Mailingliste die Datenquelle (mysql/csvfile) frei wählen!

 

6. Wie kann ich noch mehr Benutzerdaten erfassen ?

Jax Newsletter speichert standardmässig neben der e-mail-Adresse und der IP-Adresse den Inhalt Variablen
profession (Beruf), age (Alter) und nationality (Nationalität) die über das Formular sign_in.php übergeben werden.

Wenn Sie z.B. zusätzlich noch den Geburtstag der Katze des Abonennten ;-) aufnehmen möchten, ändern Sie im Skript sign.php folgende Zeilen:

if ( $log_signings )
{
$log = array();
$log[ "action" ] = "+";
$log[ "time" ] = $time_now;
$log[ "ip" ] = $REMOTE_ADDR;
$log[ "email" ] = $email;
$log[ "profession" ] = $profession;
$log[ "age" ] = $age;
$log[ "nationality" ] = $nationality;

$log[ "kitties_birthday" ] = $kitties_birthday;

$logbook->append( $log );
}

Danach müssen Sie entweder die .CSV-Datei für die Protokolllierung (standardmäßig records.csv) löschen (dann wird beim nächsten Aufruf des Skripts automatisch ein neuer Tabellenkopf angelegt,

oder die erste Zeile der Datei um den Variablennamen erweitern:

 

"action","time","ip","email","profession","age","nationality","kitties_birthday"
"+","2002-03-03 21:14:47","127.0.0.1","jack@jtr.de","Webmaster","1978","Deutsch"

 

Verwenden Sie eine MySQL-Datenbank als Datenquelle, so müssen Sie die Tabelle für die logs erweitern:

ALTER TABLE `records` ADD `kitties_birthday` VARCHAR(30) NOT NULL;

 

Wichtiger Hinweis:

Bitte beachten Sie bei der Aufnahme zusätzlicher Daten unbedingt den Grundsatz der Datensparsamkeit (im Sinne der Deutschen Datenschutzgesetze). Unzulässig ist in diesem Sinne die Aufnahme aller Daten, die zum ordnungsgemäßen Betrieb der Mailingliste nicht zwingend erforderlich sind, und über die Rückschlüsse auf die Person möglich sind. (z.B. Konfession, Sexualität, Gesundheitszustand usw...)

Statistische Daten (wie z.B. Interessensgebiete, Berufsgruppe etc.) sind dagegen evtl. für die Gestaltung eines Newsletters ohne Einschränkung der Persönlichkeit nützlich. Um rechtlichem Ärger aus dem Wege zu gehen sollten Sie lieber zurückhaltend über die Notwendigkeiten entscheiden...

 

7. Wo erhalte ich Informationen über Updates und Änderungen?

  1. Auf der Website (http://www.jtr.de/scripting/php/newsletter) natürlich! ;-)

  2. Im Admin-Skript gibt es einen Link "Auf Updates überprüfen". Links neben dem Link ist ein kleiner grüner Punkt. Blinkt dieser, grün-gelb, gibt es ein neues Update. Blinkt dieser rot-gelb, gibt es ein sicherheitsrelevantes Update!

  3. Tragen Sie sich in den jtr-Newsletter ein! (http://www.jtr.de/scripting/php/newsletter/newsletter)


 

III. Bekannte Fehler

- Wenn der Datenstrom zum Browser während des Sendens unterbrochen wird (z.B. wegen eines Proxy-Timeouts), kann es vorkommen , dass nicht alle Empfänger die Nachricht erhalten. Ausserdem kann es bei größeren Mailinglisten zu starker Zeitverzögerung kommen.

An Alternativen wird gearbeitet! :-)

 

Sollten Sie einen Fehler finden, oder haben Sie Fragen oder Verbesserungsvorschläge, zögern Sie bitte nicht, und wenden Sie sich einfach direkt an mich!

mailto: jack@jtr.de

 

Berlin, 26.03.2002 Jack (tR)