Newsletter Etapenweise verschicken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Newsletter Etapenweise verschicken

    Hallo,

    Nach all den Jahren fiehl mir auf das mein Projekt garkeinen Newsletter hat.
    Diesen habe ich nun selber geschrieben und soweit läuft auich alles.
    Allerdings verschickt er an knapp 70000 User gleichzeitig eine Email. Dies zwingt natürlich den Server in die Knie. Nun kam ich auf die Idee das ganze Etapenweise zu machen so das er immer nur an 10 User eine EMailschickt und nach 3 Sekunden sich die nächsten 10 aus der Datenbank nimmt bis alle abgearbeitet sind.

    Wie kann ich dies bewerkstelligen? Im EInsatz ist der PHPMailer.
  • Bei PHP gibt es eine Sleep-Funktion. Diese könnte dir in dem Zusammenhang vielleicht helfen. Du lädst aus der Datenbank einfach wie gewohnt alle E-Mails einmal aus und in eine while-Schleife lässt du den Newsletter an die Lebewesen versenden. Mit einem Counter in der Schleife könnte man z.B. bei jeder 100. Mail einen usleep() setzen. Das Script macht dann für eine bestimmte Zeit eine kurze Pause und macht an der aufgehörten Stelle sofort weiter.
    Mit ein bisschen Mathematik kann man das elegant lösen, dass er alles schön etappenweise versendet.

    Lieben Gruß
  • Achja, das könnte natürlich ein Problemchen werden.

    Dann würde ich einen Cronjob einrichten, der z.B. erst 100 Mails sendet, 5 Minuten später die nächsten 100 etc. Dabei Kann man das Script z.B. dynamisch bauen. Der erste Cronjob ruft z.B. die Datei so auf: ...de/newsletter_senden.php?start=0&end=100

    Die GET-Übergaben könnte man dann in ein SQL-Statement einbinden und zwar so:

    Quellcode

    1. $DB->prepare('SELECT `name`, `email` FROM `users` LIMIT <start>, <end>');


    Bei <start> und <end> eben die entsprechenden Werte einfügen. So lädt er nur 100 Datensätze. Beim nächsten Aufruf ist start dann 101 und end 200. So würde ich das halt lösen und den Timeout umgehen.