Massenversandt von Mails

ThiKool

Erfahrenes Mitglied
Hallo Community,

ich habe vor ein Newsletterscript zu erstellen. Aktuell habe ich über 500.000 mögiche Abonnenten, was die Sache ja schon deutlich schwieriger gestaltet wie ich durch google erfahren habe.

Mir sind viele Dinge noch nicht so wirklich klar.

Wie viele Newsletter sollte man pro Minute rausschicken?
Habe auch gelesen, das man das Script per unsichtbaren Iframe einbinden könnte und es dann einfach immer 50 Stück rausschicken könnte und dann per Reload neuladen und das eben solange wie der User auf der Seite ist.

Muss ich nach dem Versenden von 50 Stück eine Pause einlegen (sleep) und wie sollte man generell an dieses Thema rangehen?

Dachte einfach an eine Schleife die dann in der DB vermerkt, dass der Newsletter an den User raus ist.

Danke euch schonmal ;)
 
Ich würde das über Cron-Job erledigen. Man bräuchte eine Tabelle und 2 PHP-Scripte - eins für das Newsletter-Formular und eins für den Cronjob.

Die Tabelle enthält Spalten für

- eine ID
- ein Datum
- Newsletter-Betreff
- Newsletter-Text
- Letzte Benutzer-ID, an die erfolgreich gesendet wurde (wird beim Anlegen eines neuen Datensatzes mit 0 initialisiert
- Eine Flag-Spalte, ob der Newsletter an alle gesendet wurde

Das Formular dürfte klar sein -> Formular-Daten in die DB-Tabelle schreiben

- Das PHP-Script für dem Cronjob liest im 5-Minuten Takt alle Newsletter-Datensätze aus (LIMIT 1), bei denen das Flag-Feld nicht gesetzt ist.
- Es liest den Betreff, den Text und die letzte Benutzer-ID aus, an die gesendet wurde
- Es werden die nächsten 50 Benutzer-IDs und E-Mail-Adressen aus der User-Tabelle ausgelesen (wenn es weniger sind, ists auch OK, also LIMIT 50)
- Die News-Letter-Betreffzeile und der Body werden zusammen gebaut
- Man loopt über alle Benutzer-IDs und E-mail-Adresse und versendet die Email, danach notfalls 5-10 Sekunden schlafen
- Wenn man eine Email nicht senden konnte, wird die Schleife abgebrochen
- Die letze erfolgreiche Benutzer-ID wird in die Newsletter-Tabelle eingetragen

Wenn ich so darüber nachdenke - netter Ansatz :-)
 
Danke dir für den tollen Ansatz, ist auch soweit alles klar!

Ich habe allerdings noch Fragen zur technischen Seite:

- Woher weiß ich das der Server nicht überlastet ist, bzw. eine Pause braucht. Habe gehört das der Server selbst eine Liste zur Abarbeitung erstellt von daher sei es egal wie viele Mails man ihm z.B. pro Minute zum abarbeiten gibt?!

- Warum kann/soll ich die Mails nicht per Iframe Lösung verschicken? Mit Cronjobs hab ich leider noch nicht gearbeitet und wüsste auch nicht wo ich einen herbekomme?!

- Cronjobs laufen meiens Wissens nur im fünfminütigen Abstand und wenn ich alle 5 Minuten nur 50 Mails abarbeite bin ich ziemlich lange beschäftigt bei 500.000 Abonnenten oder berücksichigt ein Cronjob auch Reloads?!

Danke nochmal ;)
 
Ein Cron-Job läuft Server-Seitig ohne Browser und hat dadurch nur die Reload-Möglichkeiten, die man per Script einbaut. Daher auch mein Vorschlag mit der zuletzt erfolgreich gesendeten und dem Abbruch des Sendens bei Nicht-Erfolg.

Ein SMTP-Server schickt die Email sofort raus, wenn er es kann. Er hat keine Abarbeitungsliste in dem Sinne. Stell dir das wie den Brief-Kasten der Deutschen Post vor. Der SMTP-Server ist der Briefkasten, du gibst ihm den Auftrag, die E-Mail zu senden. Danach ist für dich der Käse gegessen. Entweder kommt die E-Mail dann an oder du bekommst eine "Rücksendungsmail", in der drin steht, das die E-Mail nicht zugestellt werden könnte. Es könnte ja auch sein, das es das Post-Fach gar nicht mehr gibt, der Mail-Exchanger der Gegenstelle (z.B. GMX) gerade nicht verfügbar ist, usw.

Dies wird im SMTP berücksichtigt. Du kannst lediglich überprüfen, ob dein SMTP-Server, über den du E-Mail raussenden willst, den Auftrag entgegen genommen hat.

Wenn er den Auftrag angenommen hat, wird er ihn aber sofort versuchen, auszuführen. Daher solltest du ihm die Chance geben, das auch erledigen zu können. Außerdem ist es schonender für deinen Spam-Score. Wenn du pro Sekunde 5 Emails raus sendest, könnte das schnell in einem positiven Score resultieren und dann deine vermeintlich harmlosen News-letter-mails als Spam eingestuft werden.

Das mit 50 Emails war ja nur ein Vorschlag. Prinzipiell könnte man auch 200 oder mehr nehmen. Kommt halt darauf an, wie sicher du gehen willst, das die Mails nicht als Spam eingestuft werden.

Auf jeden Fall solltest du das SMTP berücksichtigen und alle notwendigen Header senden - sonst wird die Mail sehr schnell als Spam eingestuft.

Les auf jeden fall mehr Erfahrungsberichte, wie man es machen sollte: http://board.gulli.com/thread/1036221-php-newsletter-1000-mail-funktionen-nacheinander/

Du solltest Spamassassin-Rules anschauen, auf was die Mail-Dienste so Wert legen bzw. was als Spam eingestuft wird oder zumindest den Score nach oben treibt - GMX benutzt IMHO eine stark customizede Version von Spamassassin - oder etwas ähnliches nach den gleichen Prinzipien: http://wiki.apache.org/spamassassin/Rules/
 
Ok derzeit versende ich meine Anmeldemails noch per mail() Funktion. Wie kann ich die SMTP Funktion einschalten oder programmiern? Oder gibt es ein Script dafür? Sorry das ich so dumm Frage, aber habe ncoh nie damit gearbeitet!
 
Die PHP-Funktion mail() benutzt natürlich auch einen SMTP-Server, um die Mails zu versenden. Ich würde dir nahe legen, dich erstmal mit der Materie von Email vertraut zu machen, bevor du so ein Großprojekt umsetzen willst.

Hier mal ein paar mir sinnvoll erscheinende Adressen zum unbedingten Lesen:

http://de.kioskea.net/contents/internet/smtp.php3
http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

Und das meine ich nicht als Schikane, ich befürchte sonst, das du dir sonst keine Freude damit machen wirst bei so vielen Benutzern ;-)
 
Puhh gar nicht so leicht!

Vielen Dank euch nochmal, werde mich mal reinlesen ist auf jeden Fall sinnvoll :)

Wie gesagt ich habe es ja schon erfolgreich geschafft anmelde Mails zu verschicken aber das war halt immer nur eine pro User, desshalb meine Fragen bezüglich der Technik, Serverauslastung usw.

Im Internet ist leider vieles durcheinandergeworfen, wodurch ich auch noch auf einen Betrag gestoßen bin, der darauf hinweißt, nicht zuviele Mails pro Stunde zu verschicken, da die Mails sonst als Spam eingestuft werden können.

Alles irgendwie sehr unübersichtlich für mich :)
 
Ich meinte damit nicht, das du den SMTP-Stack dafür selbst schreiben sollst ;-)

Du sollst nur verstehen, wie E-Mail funktioniert. Das SMTP-Server die ausschlaggebende Instanz für den Versand von E-Mail sind und häufig auch mit Filtern und Regeln ausgestattet sind, nach denen E-Mails eben nicht zu gestellt werden (Return to sender oder eben verworfen).

Grundsätzlich ist das mit dem massenhaften Verschicken unproblematisch, solange die Ziel-Adressen nicht auf dem gleichen SMTP-Server der Ziel-Domain liegen. Da du das aber nicht sicherstellen kannst (z.B. 300 Benutzer bei GMX), musst du vorsichtig sein.

Ob eine Nachricht als Spam eingestuft wird, entscheidet der SMTP-Server, der die Mail entgegen nimmt. Meistens durch zusätzliche Tools wie eben Spamassassin. Die kontrollieren den Inhalt der Mail und setzen anhand verschiedener Kriterien den Spam-Score. Ist ein bestimmter Level überschritten (der ist natürlich konfigurierbar), kann eine Regel in Kraft treten, die die Mail zurück sendet, löscht oder als Spam markiert in den Spam-Ordner des Empfängers ablegt. Spamassassin kann jedoch zusätzlich noch aus den eingangenen Mails "lernen", er wird mit der Zeit also effizienter. Wenn man eine Mail manuell als Spam einstuft, lernt Spamassassin das und wird es beim nächsten Empfang berücksichtigen. Von Spamassassin selbst als Spam eingestufte aber nicht gelöschte Nachrichten werden in der Regel automatisch gelernt und beim nächsten Empfang besonders kritisch analysiert.

Die Masse an E-Mails, die ein SMTP-Server verarbeiten muss, sorgt natürlich dafür, dass er sich merkt "Oh, von der Quell-Adresse kam kürzlich schon eine E-Mail mit gleichen oder ähnlichen Inhalt, irgendwas ist da komisch..."

Ich wollte mit meinen Links eigentlich nur dafür sorgen, das du damit sensibel umgehst. Es gibt schon dutzende PHP-Applikationen, die du verwenden kannst, die sollten aber nicht unachtsam eingesetzt werden.
 
Also das Programmieren traue ich mir zu, muss mich halt nur genau an die Regeln halten damit Spam vermieden wird

Aber mal ne ganz blöde Frage:

Ich habe vor Jahr vielleicht nicht mehr als 4-5 Newsletter zu verschicken, könnte ich die nicht über meinen Googlemail Account rausschicken oder unterstützt Google diese Art von Massenversand nicht?

Danke euch!

So hab mir alles soweit durchgelesen aber bin mir immernoch unsicher bezüglich der Formatierung.

Hat vielleicht Jemand von euch einen Link zu einem Mustercode, wie so eine Email auszusehen hat?

(Ich will natürlich nicht den kompletten Code für einen Newsletter, sondern nur wie eine Mail am besten formatiert sein soll, damit sie nicht als Spam erkannt wird ;)
 
Zurück