2010-01-27 4 views
7

Ich bereite eine Website vor, die E-Mail-Benachrichtigungen an registrierte Benutzer senden wird. Aus meiner Erfahrung weiß ich, dass das Versenden von E-Mails für PHP etwas mühsam ist, besonders wenn es um Tausende geht. Eine meiner Websites sendet ab und zu eine E-Mail an 1000-1500 Personen. Es dauert ungefähr 5 Minuten für PHP, das zu erreichen, also führen wir es über Nacht aus, wenn die Serverlast am niedrigsten ist. Ich verwende native mail() Funktion ohne SMTP. Dies funktioniert auf einem dedizierten Server, aber ich bin kein großer Fan dieser Lösung.Meinung zum Senden von E-Mails von PHP

Ich möchte in der Lage sein, ähnliche Beträge jederzeit zu senden, ohne den Server zu gefährden (und es auf die schwarze Liste gesetzt wird).
Ich habe gelesen, dass die ideale Lösung ist, alle paar Minuten E-Mails in Chargen (etwa 20) von einem Skript zu senden, das von Cron ausgelöst wird. Dies scheint mir eine wirklich vernünftige Idee zu sein, aber ... Was passiert, wenn ich keinen Zugriff auf Cron habe (nicht alle Hosting-Provider haben Zugriff darauf) und die Website nicht populär genug ist, um das Skript auf der Seite auszulösen Belastung?

Ich bestehe darauf, meinen Server zu verwenden, um das Mailing und keine externe Lösung zu tun.

PS. Ich habe Lösungen wie diese gefunden: http://www.mywebcron.com/ aber ist das gut?


EDIT

einfach hinzuzufügen:

  • Ich bin mit CodeIgniter,
  • Rate, mit der von meinem aktuellen Server gesendet werden E-Mails ist in der Regel 0.2sec per E-Mail.
+0

Es gibt eine CodeIgniter Wrapper für Swiftmailer; es ist in der wiki, geben Sie es eine Chance: http://codeigniter.com/wiki/CI_SWIFT_MAILER/ – gyo

Antwort

3

eine PHP-Mailer-Klasse verwenden, wie PHPmailer oder SwiftMailer, können Sie E-Mails direkt Trog SMTP senden, die Art und Weise, die viel schneller sein wird. Und das Senden großer Mengen von E-Mails ist am besten über Cron getan, so senden Sie X-Mails jede Minute. Sie werden auf diese Weise Serverüberlastung vermeiden. Wenn Sie keine Cron-Jobs auf Ihrem Server erstellen können, schlage ich vor, dass Sie Ihren Hosting-Provider wechseln, sonst ist die von Ihnen verlinkte Website Ihre einzige brauchbare Alternative (aber Sie sind auf eine dritte Partei angewiesen, die nicht wirklich cool ist)

+0

Als Ergänzung zu Jan Antwort: Wenn Sie nicht Cron-Jobs auf Ihrem Server planen können (wie bei den meisten günstigen Hosting Lösungen), es gibt einige reine PHP-Alternativen, um geplante Jobs auszuführen: [phpjobscheduler] (http://www.phpjobscheduler.co.uk/) ist eine dieser Alternativen. – Powertieke

2

Wenn Sie einen periodischen Job nicht verwenden können, sollten Sie sich eine Warteschlangenlösung wie Gearman ansehen.

Sie möchten alle Ihre E-Mails in die Warteschlange schieben und einen oder mehrere langlaufende Mitarbeiter haben, die Aufträge aus der Warteschlange auswählen. Wenn Sie dem System eine Verzögerung hinzufügen möchten, fügen Sie einfach einen Schlaf hinzu.

Einige wirklich grundlegende Pseudo-Code:

#wherever you launch the jobs from 
for each user 
    gearman.push(user.generateEmail()) 


#in your consumer script 
while true 
    message = gearman.consume() 
    message.send() 
    sleep(5)