Newsletter versenden (per Bash oder PHP?)

samy-delux

New Member
Hey Leute,

Während die Menge der eMail Adressen in meiner Datenbank weiter anschwillt, wundere ich mich, was eigentlich die beste Lösung für meine Aufgabe ist:

Ich habe ca. 17.000 User, bzw. eMail Adressen. Wir wollen nun gerne einen schön aber schlicht HTML-Formatierten Newsletter versenden, doch ich glaube mittlerweile das PHP und viele "BBC:"s dazu keine gute Lösung sind. Vor allem da man ja auch das "To:" nicht bestimmen kann. Auch habe ich gehört, dass je nach mailserver nur eine bestimmte Anzahl an "BCC:"s funktioniert.
Eine Schleife in PHP die die mail()-Funktion 17.000 mal aufruft, fällt eh raus.

Jetzt denke ich mir folgendes: Ich könnte ja die eMail von PHP (mit PHPMailer) komplett fertig in eine wirkliche eMail umwandeln lassen. Und dies dann in einem Python oder Bash Script, was im Hintergrund läuft, 17.000 mal sendmal (exim) aufruft, jeweils mit verschiedenen "To:"s.

Meint ihr das wäre praktikabel / besser?

Meistens wird man bei solchen Fragen immer auf mailman oder andere Mailinglisten Programme hingewiesen, jedoch wäre sowas für meinen Zweck unbrauchbar. Ich habe alle meine eMail Adresse in einer MySQL Datenbank und will diese nicht extra für mailman aufbereiten. Auch brauche ich keine volle Newsletter Funktion mit Anmelden, Abmelden etc.

Ich will einfach nur, dass eine HTML eMail (mit nicht HTML Ansicht) an 17.000 eMail Adressen rausgeht. ;)

so long,
Samy
 
das Programm mail (mailx) sollte dir da weiterhelfen.
Mit mail kannst du Emails über die Konsole versenden.

Code:
#! /bin/bash

for ADDRESS in user@xyz maier@web.de gott@himmel.de satan@hölle.de; do
    mail -s "Mein Toller Newsletter" ${ADDRESS} < mail.txt
    sleep 10
done

Ich glaube kaum das du Lust hast 17.000 Email Addressen per Hand einzutragen. Meine Idee zur umsätzung wäre folgende.

Du liest per PHP alle Email Adressen aus der Datenbank aus und schreibst diese in eine Textdatei. Das Format sollte "email1@provider.de email2@provider.de email3@provider.de" sein.

Code:
#! /bin/bash

ADDRESSDB="adressdatenbank.txt"
SUBJECT="Mein Newsletter"

for ADDRESS in ${ADDRESSDB}; do
  /usr/bin/php -F meinephpdatei.php | mail -s "${SUBJECT}" "$ADDRESS}
  sleep 10
done

Die Zweite Variante hat den Vorteil das direkt die Ausgabe von PHP an das Mailprogramm übergeben wird. Somit wäre es auch möglich die Variable ${ADDRESS} an das PHP Script zu übergeben und dadurch noch Informationen wie Vorname & Nachname passend zur Email auszugeben.
 
Hallo,

ich verwende MySQl und Perl, wenn ich zeitgesteuert Mails an viele Personen schicken möchte. Mit Hilfe von Mail::Sender::Easy habe ich mir eine ein kleines Script geschrieben, welches jede Minute per Cron aufgerufen wird und dann immer 50 Mails aus der MySQL-Datenbank versendet. In der Datenbank steht dann der personalisierte Mailtext, geplante Versendezeit etc.. Dateianhänge sind damit auch möglich.

Andreas
 
@bibabu: Kann ich 'mail' auch benutzen ohne den Betreff anzugeben? Also ihn aus dem "eMail Code" auslesen lassen?

Und noch was: Was ist der genaue Unterschied zwischen 'mail' und 'mailx' ?
Und warum hast du ein 'sleep 10' in dem Bash Code? Die Mailversendung würde dann 47h dauern ?!?
 
Wäre nicht auch Serienmail Massenmail Email Marketing Newsletter Software was für Dich? Die SW bietet viele Komfortfunktionen wie Platzhalter (persönliche Ansprache in der Mail) und ähnliches.

Ein besseres Management hast Du aber trotzdem z.B. mit Mailout. So ist bei 17000 Empfängern eigentlich kein händisches Bouncemanagement oder Unsubscribe möglich. Und ich meine, dass es eigentlich Pflicht ist, zumindest letzteres anzubieten.

EDIT: MailOut bietet Unsubscribe und Website Subscribe in den besseren Versionen auch an.

Thunda
 
Hallo Sammy!

Der Befehl heißt mail aber das Programm heißt unter Debian mailx.

Ich habe mal den Code ein wenig umgestellt. So würdest du den Betreff auch aus einer PHP Datei auslesen.

Code:
#! /bin/bash

ADDRESSDB="adressdatenbank.txt"

for ADDRESS in ${ADDRESSDB}; do
   SUBJECT="/usr/bin/php -F meinephpdatei.php"
  /usr/bin/php -F meinephpdatei.php | mail -s "${SUBJECT}" "$ADDRESS}
  sleep 10
done

Der sleep ist in der Tat zu hoch. Allerdings kann das Versenden von 17.000 ne zimliche auslastung erstellen. Mal von Autorespondern, Bounces, usw abgesehen.

Was mir gerade einfällt. Du scheinst ja gute PHP Kentnisse zu haben. Die Mail Funktion von PHP greift auch nur auf den lokalen MTA zu sprich macht eigentlich das gleiche wie mail(x).

Ich würde dir Empfehlen ein Script in PHP zu schreiben und dieses über die Konsole auszuführen.
 
Ich würde dir Empfehlen ein Script in PHP zu schreiben und dieses über die Konsole auszuführen.

Stimmt hätte ich auch früher drauf kommen können. Ich habe es da ich unter Zeitdruck war nun doch mit "BCC:" gemacht (und ohne "To:") dabei ist aber etwas schiefgelaufen.
Im exim log sehe ich, dass definitiv viele mails versendet wurden, aber nicht alle Leute haben eine bekommen. Es wurden alle in den "BCC:" geschrieben, aber ich habe schon gehört, da soll es Limits geben...

Ich benutze exim4 unter Debian Etch, habt ihr Tips für mich?
 
dieses über die Konsole auszuführen.
Kleiner Tipp von mir noch:
Den Aufruf des Scriptes mit sudo dem absendenden User zuordnen.
Dazu noch folgende Environment-Variablen setzten:
- USER und LOGNAME wie Absender-User.
- MAILHOST auf Absender-Domain.

Viele Mail-Programme bilden daraus den "Return-Path".
Einige Bounces als auch Spamfilter betrachten diesen Header-Eintrag.
Ob es sich bei Euch auswirkt kann man ganz leicht mit einem kleinen Test feststellen.

Ich habe ebenfalls ein Newsletter-Script welches vorher per mailq bzw. qmail-qstat die Größe der aktuellen Queue ermittelt und ab einem entsprechend hohem Wert mal Warteschleifen einlegt.
Dadurch verzögert sich zwar der gesamte Mailversand aber die Server-Last wird in Grenzen gehalten.

huschi.
 
Der Newsletter ist nun raus, über PHP in der Konsole!

Aber es entstand dadurch ein neues Problem: Wenn ich mich auf meiner Seite registrieren will, also eine ganz normale Aktion bei der eine einzelne eMail versandt wird, erscheint im exim log folgendes:
Code:
2007-10-26 17:01:42 1IlP5g-0006KM-Ud == fxcsvn@yahoo.com R=dnslookup T=remote_smtp defer (-53): retry time not reached for any host
Und die Mail wird nicht versandt.

Aber Yahoo (oder auch GMX, gleicher Fehler) sollten doch erreichbar sein. Überall im Internet steht, dass dieser Fehler bedeutet, dass der Host nicht gefunden wurde!

Woran kann das liegen?

so long,
Samy
 
Also normaler Hostnamelookup geht und die Mails die ich mir selbst geschickt habe kamen jetzt doch noch an. Mit ca. 15 min. Verspätung!

Keine Ahnung was das war...
 
Back
Top