Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Funktion mail() an 20000 Empfänger.

Hi!

ich versende an knapp 20000 Empfänger einen HTML Newsletter. Dafür rufe ich in einer PHP Schleife immer wieder die Funktion mail() mit der richtigen Mail Adresse auf.

Leider kackt der Server dabei völlig ab. (Linux mit top CPU und RAM)
Was wäre hier am besten um den Newsletterversand zu entlasten? Wo genau liegt das Problem?

Muss ich eventuell das Skript pausieren lassen? Wenn ja wie macht man das am besten?

Danke und schöne Grüße!!!

Hier gehts zum Orginal Eintrag "Funktion mail() an 20000 Empfänger." im Forum

Antworten

zb http://pear.php.net/package/Mail_Queue


2.

was genau macht der phpmailer anders?


3.

Wer hat was vom PHPMailer gesagt?
Klickst du auch auf Links in den Antworten?


4.

achso hab das mit dem php code schnipsel angeklickt :)


5.

Zitat:
achso hab das mit dem php code schnipsel angeklickt
Und wo steht da was vom PHPMailer? :)


6.

wenn man ein bisschen klickt findet man was :)

muss für das Pear package etwas installiert werden?


7.

Warum nicht mit:
http://de.wikipedia.org/wiki/Majordomo oder http://de.wikipedia.org/wiki/Ezmlm
Die sind doch genau für sowas gebaut worden...


8.

Grund Nummer eins, die Zitat ist direkt aus der Wikipedia:
Zitat:
Aus diesem Grund wird Majordomo seit 1997 nicht mehr weiterentwickelt und weist inzwischen einige nicht geschlossene Sicherheitslücken auf.
Und bei Ezmlm ist halt das Problem das es nur in Verbindung mit qmail lauffähig ist...
Aber von der Performance her sicher besser, ja.


Zitat:
muss für das Pear package etwas installiert werden?
Ja, Pear und das Package :)


9.

Ja, komm, das sollten auch nur Beispiele sein, wie: http://de.wikipedia.org/wiki/Mailman
Es gibt doch so viele davon.....

Zitat:
Und bei Ezmlm ist halt das Problem das es nur in Verbindung mit qmail lauffähig ist...
Und mit dieser Komination bin ich SEHR zufrieden..


10.

Dazu kommt noch das nicht jeder einen Server sein Eigen nennen kann und Provider sich gerne mal Querstellen ;)


11.

Und wenn du auch 1000 mal recht hast, ich denke:
Die einfachste und performanteste Lösung sollte hier wenigstens Erwähnung finden...

:) Was Sebi2006 damit macht, ist nun wirklich seine Sache :)


12.

Also eine Möglichkeit die du hättest, ist in etwa selber eine Mail-Queue zu erstellen.
Dabei könntest du ja in einem Schub 100 Mails versenden, dann ein paar Sekunden warten, und dann die nächsten Emails verschicken. So habe ich das auch in meine Software eingebaut, und es gab damit eigentlich noch keine Probleme. Du hast die E-Mail Adressen ja denke ich mittels IDs (oder sonstigen Keys) in der Datenbank. Dabei liest du erst die ersten 100 aus (mit LIMIT 0, 100), durchläzufst die, wartest dann ein paar sekunden (z.B. mit meta refresh) und leitest auf dein selbiges PHPScript um, wo du diesmal allerdings LIMIT 100, 100 ausliest und durcharbeitest.. Das geht dann immer so weiter, bis du alle E-Mails durch hast. Dauert zwar etwas, aber sollte den Mailserver nicht belasten.


13.

Zitat:
(z.B. mit meta refresh)
Na, dann lieber gleich [doc]sleep[/doc]


14.

Von sleep() hab ich damals abgesehn, da ich eine auf 30 Sekunden begrenzte max_execution_time besaß, und diese auch tatsächlich nach 30Sekunden gegriffen hat.


15.

Zitat:
DehaChris postete
Von sleep() hab ich damals abgesehn, da ich eine auf 30 Sekunden begrenzte max_execution_time besaß, und diese auch tatsächlich nach 30Sekunden gegriffen hat.
Abhilfe:
http://de2.php.net/manual/de/function.set-time-limit.php


16.

ich denke ich werde es mit einem sleep versuchen.
Grund: mit dem Metarefresh, das rafft kein Mensch und bricht dann einfach ba. Ist zu unsicher.

Wie würdet ihr das sleep setzen?
1000 Mails dann 30 sek Pause... Schlagt was vor, was wäre gut...


17.

Zitat:
Abhilfe:
http://de2.php.net/manual/de/function.set-time-limit.php
Aber nicht auf einem Shared-Account, der (selbstverständlich) nicht die Rechte dazu besitzt, set_time_limit() zu verwenden.

Zitat:
ich denke ich werde es mit einem sleep versuchen.
Grund: mit dem Metarefresh, das rafft kein Mensch und bricht dann einfach ba. Ist zu unsicher.

Wie würdet ihr das sleep setzen?
1000 Mails dann 30 sek Pause... Schlagt was vor, was wäre gut...
Sofern du set_time_limit verwenden darfst, kannst du diese Variante schon benutzen. Ich verstehe zwar nicht, was am meta-refresh falsch sein soll, da bricht nichts ab und unsicher ist da eigentlich auch nichts. Aber gut.

1000 Mails und 30Sek pause denke ich nützt nichts, ich würde da auch ein bisschen mit dem Mailserver ausprobieren (wobei es sicher doof ist hunderte von DummyMails zu versenden). 100 Mails und eine Sekunde, wäre vielleicht eine Möglichkeit.


18.

ok das würde bei 20000 und 2 sek Pause je 100 Mails bedeuten:

400 Sekunden = 6 Minuten für Pausen

ist beim mail() auch mit einer größren Verzögerung zu rechnen? Derzeit steht das Exec. Limit bei 3000 Sekunden


19.

Zitat:
ist beim mail() auch mit einer größren Verzögerung zu rechnen?
Normalerweiße nicht.


20.

ok hat geklappt

20000 Newslettermails je 100 Stück mit 3 Sekunden Pause. Das ganze war dann nach 14 min versendet.


Hier gehts zum Orginal Eintrag "Funktion mail() an 20000 Empfänger." im Forum
 
phpforum.de | Impressum