Frage

Ich habe auf eine Seite aus, die E-Mail-Newsletter-Abonnenten senden. Es gibt mehr als 14.000 Teilnehmer. Ich möchte php mail () Funktion nutzen E-Mail an sie zu senden. Aber ich fürchte, dass es nicht in der Lage sein wird, E-Mail an alle Teilnehmer für PHP 30sec max_execution_time Grenze zu senden. Es ist nicht möglich, wie viel E-Mail zu testen, kann durch Senden Test-E-Mail an Abonnenten verschickt. Deshalb mag ich wissen, wie viele E-Mails kann mit mail () Funktion in 30 Sekunden max_execution_time Grenze geschickt. Wird sehr hilfreich sein, wenn Sie mir antworten kann.

auch eine andere Frage - Ist mysql Ausführungszeit auch in PHP zählen ist?

Apache-Version 2.2.13 (Unix) PHP Version 5.2.11

War es hilfreich?

Lösung

Die PHP max_execution_time Einstellung ist anpassbar. 30 Sekunden ist der Standard, aber Sie können es gar Sekunden ohne Ausführungszeit 0. Verwenden Sie set_time_limit () .

set_time_limit(0);

Wenn Sie dies tun, sollten Sie in der Lage sein, alle Ihre E-Mail senden.

Bitte seien Sie vorsichtig über mehr als eine E-Mail an demselben Mail-Server pro Sekunde gesendet werden. Sie wollen nicht die schwarze Liste gesetzt werden.

Andere Tipps

Sie sollten dies von einem Cronjob ausführen oder eine Hintergrundaufgabe laichen oder etwas anderes besser geeignet, um Batch-Jobs verwenden.

Sie könnten 14.000 E-Mails aus in 30 Sekunden erhalten, wenn Ihr Mail-Server schnell genug ist, aber was passiert, wenn man ein paar mehr Teilnehmer bekommen und es funktioniert nicht mehr richtig?

Vielleicht können Sie einen Flag in der Datenbank für jeden Benutzer festgelegt, dann wird das Flag zurückgesetzt, wie die E-Mail von einer Hintergrund-Task gesendet wird. Das wird dazu beitragen, um Duplikate zu vermeiden und so weiter, wenn es ein Problem mit dem Mail-Server ist.

Das hängt von so vielen Variablen, dass eine einzige Antwort ist nicht möglich. Faktoren gehören:

  1. Die Geschwindigkeit der CPU
  2. Die verfügbare Bandbreite aus dem Sendesystem an den MTA
  3. Die Kapazität des MTA-E-Mails zu akzeptieren

Der einzige Weg, um herauszufinden, ist, es zu versuchen.

ich hatte genau dieses Problem auf einem meiner Projekte eine Weile zurück. Die Lösung ist die E-Mail isolieren von der eigentlichen Website senden.

I codierte eine kleine Klasse, die aufgerufen wird, würde eine E-Mail zu senden. Es wäre eine Templat-E-Mail übergeben werden, die sie dann in die Datenbank in einer Mail-Warteschlange speichern würden. Am hinteren Ende hatte ich einen cron-Job, der ein Mailer Skript alle X Sekunden bezeichnet. Skript schaut auf der Datenbank-Warteschlange für E-Mails, packt X Nummer aus der Warteschlange (durch Zeitstempel in geordneten) zu senden, um zu versuchen, würde dann Zustellversuch. Unter der Annahme, keine Fehler geworfen wurden, würde Skript die Nachricht markiert als gesendet. Der nächste Schritt wäre, alle E-Mails aus der Warteschlange zu löschen, die als X Tage gesendet und älter wurden (für die Protokollierung gehalten).

Hope, die hilfreich ist.

Im Ernst, wenn Sie die gleiche E-Mail zu zehn Personen von Ihrem normalen mailapp senden möchten, erstellen Sie in der Regel zehn identische Mails oder senden Sie einfach die E-Mail die Empfänger in die Sendeliste einmal hinzufügen?

Edit: Wenn die Antwort „Ich habe es einmal senden“, ich glaube, Sie in dieser Richtung auch hier aussehen soll (es wird auch beschrieben, wie unter http://www.php.net/mail )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top