PHP Newsletterversand

Seth93

Well-known member
ID: 322821
L
24 November 2008
1.400
82
Hallo,

ich wollt mal fragen, wie es am sinnvollsten ist einen Newsletterversand zu schreiben.
Es sollte bei vielen Usern auch noch zuverlässig versenden.

Sollte das ganze erstmal per PHP gemacht werden? Gibt s was besseres?
Dann über SMTP oder über normale mail()-Funktion.

Einfach eine Datei wo set_time_limit() auf 0 gesetz wird und dann per Schleife alles versenden?
Oder vllt immer eine bestimmte Anzahl von Datensätzen auslesen und versenden und dann per AJAX oder Meta-Refresh weiter machen?

Lg
 
Mal kurz zusammenfassen:
  • Definitiv SMTP denn der Versand ist damit sicherer (requeue, unavailability handling, ...)
  • Am besten das ganze in kleinere chunks unterteilen und diese dann per Cron verschicken, oder von der command line abschicken, set_time_limit is sehr hacky und funktioniert nur selten
  • Bloss nicht den Versand per Webseite anstossen, der Versand ist background processing und wenn du da ein Web Frontend davor packst laedst du jede menge Probleme ein die gar nichts mit dem Mailversand zu tun haben
  • Was du machen kannst ist ein Ajax monitoring das ausliest wieviele mails im background script versandt wurden.

HTH,
Snyke
 
Hi,

heißt das dann das ich 20 Cronjobs einrichten muss, wenn ich z.B. Mails zu Paketen von 100 Stück versenden will bei angenommenen 2000 Abonnenten?

Die Zahl der Abonnenten ist ja auch nicht immer gleich, mal sind es 2000 mal vielleicht nur 1600. Wie regelt man das dann mit den Cronjobs?
 
...Wie regelt man das dann mit den Cronjobs?
Es wird eine Datei z. B. mailversand.php erstellt. Diese liest die vorhandenen Datensätze aus der Tabelle Newsletter aus nach und nach aus und löscht nach dem Versand die "Mails". Diese Datei wird per Cronjob aller z. B. 5 Minuten gestartet.

Dann gibt eine andere Datei im z. b. Admin, in welcher der Newsletter erstellt wird und dann nach dem Abschicken die Tabelle Newsletter füllt.
Man kann so das System aber auch nicht nur für Newsletter, sondern auch für normale Mails nutzen. Der Versand kann natürlich dann etwas dauern aber so ist sichergestellt, dass die Mail auch ordentlich rausgeschickt wird.
Alternative wäre ein schon existente Mailversandfunktion, die wesentlich mehr Sachen drauf hat: Templates und sowas als Beispiel. Mir fällt allerdings gerade nicht der Name ein, könnte aber phpmailer heißen.
 
PHPMailer isn Script, um Mails unkompliziert zu schicken. Den Inhalt musst du aber selber vorgeben, also nix Templates oder so.

Mailen mit PHPMailer und der Cronjob-Lösung is aber sehr gut - praktizier ich z.B. so -, weil man nicht alle möglichen einzelnen Felder in die DB speichern muss, sondern direkt ein PHPMailer-Objekt im Admincenter instanziieren kann, füllen kann und dann in der DB abspeichert. Der Cronjob muss dann nur noch das Objekt laden und die send()-Methode ausführen.
 
soviel zu relationalen Datenbanken und Normalformen ...
Is doch normalisiert: ein Objekt drin :ugly:

Ne Newsletter-to-go-Tabelle bräuchte theoretisch nicht mal n Primärschlüssel, wenn man da nicht das Problem der Identifizierung hätte, von daher :mrgreen:

Ne Textdatei würde es ja auch tun ;)
 
Haeh? Wieso muss ueberall eine DB drin sein? Aber egal...

Momentan mach ich das so dass eine Newsletter einfach ein Template ist mit dem Text den ich versenden will und placeholder die abgefuellt werden, dann hab' ich fuer Newsletters von meiner domain ein anderes Template namens Layout in das der eigentliche Text kommt. Wenn es ans verschicken geht nehm ich einfach den User an den ich die Mail verschicken will, fuell die placeholder ein in der Mail (Name, Adresse, Anrede, ...), dann pack ich das ganze in das layout und verschick das ganze.

Alles was ich benutz is ein Textfile in dem ein serialisiertes PHP Array mit den user Id's is die die Mail noch bekommen muessen. Wenn der Cron laeuft liesst er das Array aus, schnappt sich X, versendet die mails, loescht die Id's aus dem Array und schreibt es zurueck.

Was ich fuer den ganzen Templating gugus verwende: Smarty->fetch(). Das mailing wird ueber SMTP server und Pear::Mail

Ach ja und bei dem ganzen Zirkus nicht Pear::Mail_mime vergessen denn man sollte niemals HTML-only mails verschicken, es giebt immer noch viele Leute die lieber Text mails lesen :)

HTH,
Snyke