Massen-Mail mit PHP
Bastian Kurz
- php
Ich habe ein Newsletter-Script mit PHP erstellt. Die Mailadressen stehen in einer DB. Innerhalb einer While-Schleife werden alle Mailadressen geholt und an die PHP-Funktion mail() übergeben.
Mittlerweile habe ich ca. 500 Adressen und das Script zeigt Macken. Es führt irgendwann unverständlicherweise zu einer 404-Seite (was eigetnlich gar nicht sein kann, weil keione neue Seite geladen wird).
Wo kann das Problem liegen? max_execution_time ist es wohl nicht.
Wie kann man das besser machen? Es ist überhaupt sinnvoll, 500 mal mail() aufzurufen? Könnte ich das vielleicht nur einmal machen und alle Adressen per BCC übergeben?
Oder sollte man direkt mit sendmail sprechen und mail() nicht einsetzen?
Wie realisiert ihr so etwas bei vielen Mails? Danke schonmal.
Bastian
Hallo Bastian!
Ich habe ein Newsletter-Script mit PHP erstellt. Die Mailadressen stehen in einer DB. Innerhalb
[...]
Könnte ich das vielleicht nur einmal machen und alle Adressen per BCC übergeben?
Ja, so würde ich es machen. Alle Empfänger in "BCC" und (ggf.) eine Dummy-Adresse in "To".
Hallo,
Ja, so würde ich es machen. Alle Empfänger in "BCC" und (ggf.) eine Dummy-Adresse in "To".
Gibt es da eigentlich ein Limit wieviele in BCC drin stehen dürfen? Ich kann mir denken dass man bei 100.000 E-Mails dann doch irgendwelche begrenzungen eingebaut haben könnte oder nicht?
Wenn ich aber einen Link zum Austragen drinn haben will, dann muss das ja eine individuelle E-Mail an jeden sein. Wie mache ich das dann? Warscheinlich dann nicht wirklich mittels PHP oder? Welche Möglichkeiten gibt es da eigentlich noch, bzw. nach was muss ich suchen um darüber mehr zu erfahren?
Grüße
Jeena Paradies
Hallo Jeena,
Gibt es da eigentlich ein Limit wieviele in BCC drin stehen dürfen? Ich kann mir denken dass man bei 100.000 E-Mails dann doch irgendwelche begrenzungen eingebaut haben könnte oder nicht?
Theorethisch nicht. In der Praxis kann es jedoch oft so sein, dass dein Provider E-Mails mit entsprechend vielen Empfängern wegen Spamverdachts ablehnt.
Wenn ich aber einen Link zum Austragen drinn haben will, dann muss das ja eine individuelle E-Mail an jeden sein. Wie mache ich das dann? Warscheinlich dann nicht wirklich mittels PHP oder?
Entweder mit PHP oder einer beliebigen anderen dafür geeigneten Programmiersprache deiner Wahl ;-)
Welche Möglichkeiten gibt es da eigentlich noch, bzw. nach was muss ich suchen um darüber mehr zu erfahren?
Ich würde es mal mit »Newsletter Script« o.ä. versuchen.
Schöne Grüße,
Johannes
Hallo,
Ich würde es mal mit »Newsletter Script« o.ä. versuchen.
Das ist es ja, ich bin der der es programmiert, und versuche herauszufinden wie ich 100.000 persönliche E-Mails auf einmal verschicken kann. Ok erst einmal werden es vielleicht 50 sein, aber ich habe in der Zukunft keine Kontrolle darüber, und es kommt voll uncool wenn das Teil dann irgendwann nur deswegen nicht funktioniert, weil sich zu viele für den Newsletter angemeldet haben.
Grüße
Jeena Paradies
Hallo Bastian
Ich lasse mir nur immer ca. 50 mailadressen aud der db holen und versehe jede versendete mail mit einem flag.
nachdem die 50 mailadressen abgearbeitet wurden wird $_SERVER[PHP_SELF] aufgerufen und wieder 50 mailadressen ohne flag bearbeitet.
wenn kein datensatz ohne flag vorhanden ist werden die flags wieder zurückgesetzt und sind bereit für den nächsten newsletter.
Wo kann das Problem liegen? max_execution_time ist es wohl nicht.
solange deine schleife läuft wird dein script nicht beendet und sollte bei 500 mails über deine max_execution_time (maximale ausführungs zeit) kommen.
nurso
Hello,
welcher Grund besteht dafür, dass das mit PHP gemacht werden muss?
Das ist doch eine klassische Aufgabe für eine einfache Shellscript-Programmierung.
Das kann man dann auch im Hintergrund laufen lassen.
Wenn es jedoch nun unbedingt mittels Browser vorbereitet, gestartet und kontrolliert werden soll, dann muss der Browser ja wohl auch nicht die ganze Zeit auf eine Antwort aus dem Script werten, oder? Stoß das Script an, lass es trotz User-Abort weiterlaufen und schau nur gelegentlich in eine Kontrolldatei rein, was der Status Quo ist.
Über diesen Weg kannst Du das Script dann auch abwürgen, wenn es sich aufgehängt haben sollte oder Du zwischendurch merkst, dass das versehentlich die Neujahrsansprache vom letzten Jahr war *gg*
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Ich habe ein Newsletter-Script mit PHP erstellt. Die Mailadressen stehen in einer DB. Innerhalb einer While-Schleife werden alle Mailadressen geholt und an die PHP-Funktion mail() übergeben.
Noch eine Idee:
Das Script nimmt den Text entgegen und speichert ihn.
Und gibt eine kurze Antwort-Seite aus, die dann (meta refresh) auf dasselbe Script, jetzt aber mit Parameter nr=0 o.ä. weiterleitet.
Jetzt schickt das Script z.B. 50 Mails (beginnend bei der im Parameter angegebenen Nr.) los und schickt wieder eine kurze Antwortseite (die kann z.B. Informationen über die Anzahl der bisher verschickten Mails enthalten) an den Client. Außerdem enthält sie wieder meta refresh wieder auf dasselbe Script, jetzt aber mit hochgezähltem nr=50
Und so geht das dann, bis alle Mailadressen abgearbeitet sind.
Es wird kein max_execution_time erreicht.
Der Admin, der den Mailversand anstößt, bekommt Statusmeldungen, wie weit der Vorgang fortgeschritten ist.
cu,
Andreas