Frage

Ich denke darüber nach, wie große Mengen von E-Mails von meiner Web-Anwendungen zu handhaben das Senden und ob es irgendwelche Best Practices für dies zu tun. Stackoverflow ist bereits Kennzeichnung dies als ‚subjektiv‘, die es in einem Ausmaß sein können, aber ich brauche die erfolgreichste Weg, zu wissen, dieses System zu implementieren, oder ob ein Standardansatz vorhanden ist.

In meinem Webapp gibt es Benutzer, die Köpfe der Gruppen von 1 bis 10.000 Benutzer sind. Dieser Benutzer muss in der Lage sein, eine Nachricht an alle diese Benutzer durch mein System eine E-Mail senden. Daher mein System ist verantwortlich für die für jede Gruppe Kopf zu 10.000 E-Mails an einzelne Benutzer zu senden werden.

Soweit ich das beurteilen kann, gibt es keine Begrenzung in GMail für Nachrichten an Personen zu senden (obwohl es ein 500 Empfänger max).

Im Moment meine aktuelle Setup ist:

  • Wenn eine Nachricht durch das System gesendet wird, es tritt eine E-Mail-Warteschlange.
  • Ein Cron-Skript packt Nachrichten aus der Warteschlange alle paar Minuten, und die E-Mails sendet.
  • Alle E-Mail-Platz durch GMail SMTP-Server stattfindet.
  • Die tatsächliche Anwendung der Mailing tun ist PHPMailer.

Dieses Setup, wie die Benutzerbasis wächst, wird wahrscheinlich nicht ausreichen. Die Fragen, die ich habe, sind:

  1. Sollte ich stattdessen einen lokalen SMTP-Server verwenden?
  2. Soll ich eine Mail binäre auf dem lokalen Rechner verwenden, anstatt? Ich diesen Fall, ich könnte wahrscheinlich die Warteschlange vollständig überspringen?
  3. Gibt es eine akzeptierte Möglichkeit, dies zu tun?

Danke!

War es hilfreich?

Lösung

Mit einer E-Mail gilt als „hoch“ als 10.000 pro Tag, würde ich nicht auf GMail verlassen (oder andere) SMTP. Nicht, dass sie nicht damit umgehen können, natürlich können sie viel mehr handhaben. Aber sie möglicherweise nicht wollen.

Mit einem lokalen SMTP-Server IMO ist der Weg zu gehen:

  • Es ist ziemlich einfach einzurichten (NICHT nur Menschen verwenden lassen Sie es ohne ein starkes authent Schema)
  • Die meisten modernen MTA behandeln Warteschlangen sehr gut
  • Senden
  • Sie werden nicht mit GMail (oder andere) zu tun haben, zu entscheiden Ihr Konto eines Tages für die Quote Gründen zu blockieren

Andere Tipps

Google App Engine

Ich würde schreibt diese in Google App Engine (Python), weil:

  • Es skaliert gut.
  • Es hat einen guten E-Mail-api.
  • Es hat eine taskqueue mit einem guten api, um darauf zuzugreifen.
  • Da Python ist eine nette Sprache.
  • Es ist (relativ) billig.

PHP

Wenn ich es in PHP implementieren würde, ich würde

  • Suchen Sie sich einen guten SMTP-Server, die Sie gesendet, um dieses Volumen von E-Mails erlaubt, weil Google Mail werden Sie nicht zulassen, dass diese Art von Volumen gesendet. Ich bin sicher, dass dies etwas Geld kosten.
  • Suchen Sie sich eine anständige PHP E-Mail-Bibliothek gesendeten Nachrichten mit wie zum Beispiel PHPMailer wie Sie gesagt haben.
  • eine Nachrichtenwarteschlange verwenden, wie zum Beispiel beanstalkd E-Mail-Nachrichten in der Warteschlange zu stellen und gesendeten E-Mail asynchron. Erstens, weil damit der Benutzer snappier Seite zu laden hat. Zweite mit einer Nachrichten-Warteschlange wie beanstalkd Sie Geschwindigkeit des Sendens besser regeln können, welche eine Überlastung Ihrem PC mit der Arbeit zu verhindern. Sie müssen den SSH-Zugriff auf den Server haben zu kompilieren (Installation) beanstalkd. Sie können beanstalkd unter beanstalkd
  • finden
  • Sie würden auch ssh-Zugang benötigen eine PHP-Skript im Hintergrund laufen zu lassen, die die Nachrichten-Warteschlange verarbeitet. Sie können einen beanstalkd-Client unter php beanstalkd-client
  • finden

von PHP / Apache / Webseite

Dies ist die Seite, von der Sie Nachrichten aus an Benutzer gesendet werden. Von dieser Seite finden Sie Nachricht durch Codierung etwas in den Zeilen dieses beanstalkd gesendet:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

Sie müssen Nachrichten in Message Queue Befehl put put

Von lange läuft PHP-Skript im Hintergrund:

Der Code würde wie folgt aussehen:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

Wie ich sage, es ist möglich, sowohl mit PHP und Google App Engine, aber ich würde für App Engine gehen, weil es einfacher ist, zu implementieren.

Google Mail und Google Apps begrenzt Sie auf rund 500 E-Mails pro Tag. Ich bin mir nicht sicher, wie das mit dem 500 Empfänger max kombiniert, aber wenn Sie 10 000 E-Mails senden möchten, werden Sie wahrscheinlich einen anderen Mail-Server finden wollen. Ich persönlich benutze einen lokalen Server oder den ISP oder Rechenzentrum SMTP.

Wenn Sie, dass viele E-Mails senden, würde ich empfehlen, die Warteschlange mit, so dass die Benutzer nicht dort sitzt wartet, bis die E-Mail gesendet werden.

Seien Sie sehr vorsichtig, dass Ihre Domain nicht als Spam-Domain schwarze Liste. Ist dies der Fall, können Sie die meisten Ihrer E-Mails erwarten gesperrt werden, Support, Vertrieb, usw. Was wiederum sehr teuer sein könnte.

Sie können stattdessen einen Dienst wie AWeber verwenden möchten. Sie sind nicht nur diese Mengen an E-Mails zu verarbeiten Setup, aber sie können Sie wahrscheinlich mehr Metriken geben, als Sie selbst umsetzen können.

Ich bin mir nicht sicher, ob es irgendwo publishe ist, aber aus Erfahrung kann ich Ihnen sagen, dass Google Mail eine 15 Minuten oder so einfrieren auf Ihrem Konto gesetzt wird, wenn Sie hunderte von Nachrichten zu einem Zeitpunkt beginnen zu senden. Dies passierte mir letzte Woche. Ich denke, Sie sollten Ihren eigenen SMTP-Server hosten. Mit Hilfe der Funktion mail () oft wird Ihre Mail in jemandes Spam-Ordner.

Einfach installieren Postfix auf dem lokalen Rechner oder eine Maschine auf dem gleichen LAN für eine maximale Zugriffsgeschwindigkeit. Stellen Sie sicher, es ist gut von außen gesichert und schnell von innen zugänglich.

Dann wird Ihr PHP-Script-Code, um direkt die E-Mails an die Postfix Warteschlange zu injizieren. Das soll die Verarbeitungsgeschwindigkeit der Postzustellung drastisch erhöhen.

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