newsletter mit mail() im hintergrund versenden lassen?

splat

Erfahrenes Mitglied
Hi,

Ich würde gerne einen Newsletter über php versenden lassen. Das ganze funktioniert auch soweit prima. Allerdings lässt mein provider nur 500 mails / Std zu. Wie löse ich das denn nun am besten? Habe hier schon einige Beiträge zu diesem Thema gelesen, aber es war leider nie so richtig etwas für mich dabei. Wenn ich das skript nun Aufrufe und mit sleep die notwendigen Pausen einbaue, dann müsste ich das Browserfenster ja solange geöffnet haben, bis der ganze Newsletter durch ist, oder?
Kann man die Mails nicht irgendwie im Hintergrund auf die nächsten paar Stunden verteilt versenden lassen?

Gruß,
Marc
 
hier noch ein paar zusätzliche Infos, vielleicht hilft das etwas weiter:

- habe auf meinem Server PEAR installiert (falls die mailfunktion davon etwas nützliches für mich haben sollte)
- Man könnte php skripte auch über cronjobs steuern
- Der komplette Newsletter befindet sich in mysql

Komme leider von selbst auf keine vernünftige Lösung. Vielleicht habt ihr ja einige Ideen.

Marc
 
Hallo!

Bei 500 Mails/h macht das 12.000 Mails/Tag..... oder auch 84.000 Mails/Woche.
Wieviele Newsletter musst Du denn insgesamt verschicken?

Mal ein anderes Beispiel:
Angenommen Du könntest die Mails im Sekundentakt verschicken (wird in der Praxis wohl nur schwer erreichbar sein).
Dann sind es 3.600 Mails/h..... 86.400 Mails/Tag..... 604.800 Mails/Woche..... oder auch 2.592.000 Mails/Monat.
Diese "kleine" Anzahl an Mails dürfte z.b. für GMX ein Problem sein.
Daher kann man wohl davon ausgehen dass der Versand über mehrere Mailserver verteilt wird (für GMX sicherlich kein Problem..... bei Dir lässt es sich wahrscheinlich nicht machen).
Was bei GMX aber auffällig ist, ist dass die Newsletter nicht an alle Mitglieder an einem Tag versendet werden.
Bei über 12.000 Newsletter wirst Du hier also auch ansetzen müssen (evtl. schon mit in die Planung einbeziehen, man weiss ja nie was eines Tages kommt ;) ).

Zum eigentlichen Problem:
Ich würde eine Art Counter (in MySQL) anlegen.
Spontan würde ich sagen dass Du 2 Spalten brauchst, eine in der bei jedem Versand hochgezählt wird und eine in der das Datum steht.
Der Zähler dient dazu, dass Du beim "SELECT.....LIMIT xxx,500" immer die nächste Startzahl angeben kannst.
Das Datum dient dazu, dass Du es mit dem aktuellen Datum vergleichen kannst.
Ist es identisch, dann passiert nichts.
Ist es aber nicht mehr identisch (was ja um Mitternacht der Fall sein wird), dann wird das Datum auf das aktuelle geupdatet und gleichzeitig wird der Zähler auf Null zurückgesetzt.
Dass funktioniert so allerdings nur wenn 1 Tag ausreicht um alle Newsletter zu verschicken.
Die ganze Sache verpackst Du dann in ein PHP Script, welches Du per Cronjob im Stundentakt ausführst.

Hmm, interessantes Thema (gibt ja sicherlich noch mehr Leute die dieses "Problem" haben)..... wenn ich de Möglichkeit zum testen hätte, würde ich mich damit auch mal auseinandersetzen.
Aber vielleicht hilft Dir der Ansatz ja schon weiter.

@Ramon, wie sollte ein Cronjob das Limit umgehen können?
Es wird wohl eher dazu führen dass die Mails schlicht und einfach nicht verschickt werden..... und statt dessen eine Meldung in der Logdatei auftaucht.

Gruss Dr Dau
 
Es ging ihm ja darum, dass er eine Methode hat (Schleife mit sleep-Timer) mit der er diese Sperre umgehen kann, aber er möchte halt seinen Browser nicht die ganze Zeit damit beschäftigen - er muss also das Script irgendwie Remote ausführen -> daher der Tipp mit dem Cronjob. Alternativ könnte er per SSH einen Brwoser öffnen und die Seite aufrufen, jedoch ist ein Cronjob da schon etwas "bequemer"...
 
sleep() funktioniert sowieso nicht..... wegen der max_execution_time. ;)
Gleiches kann aber auch bei der grossen Anzahl der Mails passieren.
Bei meinem o.g. Gedankengang könnte man das Problem umgehen..... in dem man nicht einmal pro Stunde 500 Mails verschickt, sondern z.b. alle 3 Minuten jeweils 25 Mails (60/3*25=500 ;) ).
 
Okay, dass wäre natürlich eine Alternative.
Die max_exec_time kannst du ja meistens temporär hochsetzen, aber einfach alle 3min eMail verschicken ist natürlich auch eine Idee und vorallem sollte das die max_exec_time nicht überschreiten, da 25 Mails doch recht schnell versandt sind. (Habe Erfahrung damit gemacht und die Schleife ausversehen unendlich laufen lassen. Hatte nach einigen Minuten schon einige Hundert Mails im Fach (Rest lag noch in der Queue vom MailServer))
 
Guten Morgen Dr. Dau und Ramon,

erstmal vielen Dank für die schnelle Hilfe und die Vorschläge. Also ich muss ca. 2500 Newsletter versenden lassen. Einen zweiten Server werde ich noch nicht benötigen, aber danke für den zusätzlichen Hinweis! :)
Ich glaube aber, das ganze funktioniert so mit dem Datum nicht. Der Newsletter zu unterschiedlichen Zeiten verschickt. Es kommt nämlich auch mal vor, das der Newsletter am späten Abend um 23 Uhr verschickt wird. Dann würde ja nur noch eine Stunde für den Versand bleiben. Eine Lösung ohne Cronjobs gibt es wohl gar nicht, oder?

Gruß,
Marc
 
Also wenn Du die Mails ohne Rhythmus verschicken willst, kannst Du einen Cronjob vergessen..... denn der ist dazu da bestimmte Aufgaben zu vorgegebenen Zeiten automatisch zu erledigen.
Da Du die Mails aber nicht zu festen Zeiten verschicken willst, wird Dir nichts anderes übrig bleiben, als sie per Hand zu verschicken.
Bei 2.500 Mails und 500 Mails/h kannst Du Dich dann schonmal auf eine "Nachtschicht" vorbereiten.
Wenn Du abends um 23 Uhr anfängst, bist Du morgens um 4 Uhr fertig. ;)
Die einzigste Alternative die mir da einfällt: suche Dir einen anderen Hoster der kein Limit hat.
 
Moin moin Dr. Dau!

Mit einem Cronjob müsste es doch bestimmt trotzdem funktionieren. Der Cronjob wird jede Stunde ausgeführt, nur muss eben irgendwie anders kontrolliert werden, ob der Empfänger schon den Newsletter bekommen hat oder eben noch nicht. Sobald der Newsletter für einen Empfänger versendet wurde, wird der Empfänger in der Datenbank markiert. Wenn ein Empfänger noch nicht markiert wurde, dann bekommt er eben beim nächsten mal oder beim übernächsten mal seinen Newsletter geschickt. Dann wäre es auch egal, welches Datum man gerade hat.
Soweit die Theorie.. das sollte doch so eigentlich funktionieren, oder?
 
Zurück