So planen Sie E-Mail-Benachrichtigungen in PHP

8

Ich kann E-Mails mit PHPmail versenden. Aber was, wenn ich viele E-Mails senden muss?

Dies könnte eine "Benachrichtigung" an die Site-Abonnenten sein, wenn eine neue Nachricht gepostet wird. Dies direkt im Seiten-Handler zu tun, wird die Leistung ernsthaft beeinträchtigen und das Laden des Browsers zu langsam machen. Also muss ich diesen Job im "Hintergrund" erledigen lassen.

Wie kann ich etwas in PHP "planen", in meinem Fall - E-Mails senden? In C ++ zum Beispiel würde ich einen separaten Thread erstellen, aber AFAIK gibt es in Multithreading in PHP nicht.

    
Captain Comic 09.03.2011, 09:00
quelle

7 Antworten

8

Erstellen Sie einen CRON-Job, der die von Ihnen gespeicherte E-Mail-Warteschlange in einer Datenbank sendet:

  1. Speichern Sie eine E-Mail mit allen Informationen in einer db.

  2. Verwenden Sie regelmäßig einen CRON-Job (wie etwa jede halbe Stunde - abhängig von Ihrem Hosting-Provider und der Anzahl der E-Mails, die Sie versenden), E-Mails aus der Warteschlange und senden Sie sie aus. Setzen Sie dann ein sent -Flag auf die E-Mail in der Datenbank, fügen Sie die gewünschten Sendeinformationen hinzu (z. B. Uhrzeit, Fehler, Header, ...).

Achten Sie darauf, die E-Mails in Blöcke zu zerlegen und sie mit Pausen auszusenden, um Probleme mit Anti-Spam- und Anti-Flood-Schutz einiger E-Mail-Server zu vermeiden. Einige Mailer-Bibliotheken haben dafür Plugins (wie SwiftMailer ).

    
Czechnology 09.03.2011, 09:03
quelle
3

Um solche Dinge zu planen, ist es am besten Cronjobs zu verwenden, dies wird auf dem Server selbst statt in PHP definiert. Der Cronjob kann jedoch ein PHP-Skript aufrufen, das ausgeführt wird.
Dies mit einem Cronjob zu tun hat einige Vorteile, da es die Leistung der Endbenutzer nicht (direkt) beeinflusst und Sie es zu bestimmten Zeiten ausführen können.

    
gnur 09.03.2011 09:03
quelle
2

Sie können einen Cron-Job verwenden, um ein Skript regelmäßig auszuführen und ausstehende Benachrichtigungen zu senden.

Eine Alternative wäre, einen anderen Prozess im Hintergrund zu starten, der etwas wie folgt verwendet: exec('php send_notifications.php 1>/dev/null 2>1 &'); (beachte das Zeug am Ende).

    
Daniel Dinu 09.03.2011 09:15
quelle
1

Sie können Cron-Jobs erstellen für diesen Zweck verwenden und sehen die folgenden Diskussion

    
Awais Qarni 09.03.2011 09:04
quelle
1

Ich benutze einen Hintergrundprozess (ein PHP-Programm kann von der Kommandozeile ausgeführt werden, wenn Sie über die CLI [Command Line Interface] Zugriff auf den Server haben). Der Prozess überprüft eine MySql-Tabelle auf E-Mails, die in die Warteschlange gestellt werden.

Bei meiner Herangehensweise wird der Browser nicht zum Senden von E-Mails verwendet, sondern nur zum Schreiben in die MySql-Tabelle.

    
Ian 09.03.2011 09:07
quelle
1

Halten Sie alle Ihre E-Mail-Daten in einer Mysql-Datenbank gespeichert. Tabellenstruktur könnte ähnlich sein.

TO_EMAIL_ID | EMAIL_TYPE | E-MAIL-FACH | EMAIL_CONTENT | VERARBEITET | INSERT_TIME.

fügen Sie Ihren gesamten E-Mail-Inhalt in diese Tabelle ein. Und haben ein PHP-Skript, das Daten aus dieser Tabelle abruft und E-Mails in Stapeln sendet, und löscht / Markiert die verarbeiteten E-Mails als verarbeitet. Nehmen wir an, diese Datei ist sendMailers.php Dann können Sie einen Cron-Job festlegen, um diese Datei alle 5 Minuten auszuführen. siehe Ссылка

%Vor%     
DhruvPathak 09.03.2011 09:08
quelle
0

Sie müssen Aufgaben planen in Windows oder Cron-Jobs in Unix-ähnlichen Betriebssystemen (zB: linux) verwenden.

    
Vinoth13 09.03.2011 10:14
quelle

Tags und Links