2009-04-24 11 views
3

Ich arbeite für ein Unternehmen, das seinen Kunden Kundensupport bietet. Ich versuche, ein System zu entwerfen, das E-Mails automatisch an Clients sendet, wenn ein Ereignis eintritt. Das System würde aus einem Backend-Teil und einem Web-Interface-Teil bestehen. Das Backend wird die Kommunikation mit einer Webschnittstelle (die nur für den internen Gebrauch verwendet wird, um die E-Mail-Vorlagen zu ändern) handhaben und vor allem wird es einige Datenbanktabellen überprüfen und basierend auf diesen Ergebnissen E-Mails versenden ... viele davon.Wie gestaltet man ein E-Mail-System?

Nun, ich frage mich, wie kann dies gestaltet werden, so dass es skalierbar gemacht werden kann und die notwendige Leistung bereitstellen, da es wahrscheinlich ein paar tausend E-Mails pro Stunden verarbeiten muss (dies sollte der Blick sein). Mich interessiert vor allem, wie diese Art von Architektur gedacht werden sollte, um bei Bedarf einfach skaliert werden zu können.

Python wird im Backend mit Postgres und wahrscheinlich auch mit dem, was zuerst zwischen einem Python-Webframework und GWT auf dem Frontend passiert (was die einfachste Aufgabe zu sein scheint).

Antwort

2

Das klingt für mich, dass Sie versuchen, für die Stapelverarbeitung zu optimieren, wo die Hitze auf der Weboberfläche aber im Backend geschieht. Dies klingt auch nach einer Warteschlangenarchitektur.

Amazon bietet Warteschlangen-Systeme zum Beispiel, wenn Sie wirklich massiven Maßstab benötigen. Sie können also mehrere Maschinen auf Ihrer Seite hinzufügen, um die Nachrichten als eMails zuzustellen. Sie erlauben also einem Rechner, nur 100 Nachrichten gleichzeitig aus der Warteschlange zu nehmen.

Das Muster mit eMail-Systemen sollte asychon klingen, schauen Sie sich also andere asynchrone Bilder an, wenn Sie keine Warteschlangen mögen.

5

Dies ist ein wirklich guter Kandidat für die Verwendung einiger Software von der Stange. Es gibt eine beliebige Anzahl von Open-Source-Mailinglisten-Manager-Paketen; Sie wissen bereits, wie man die Massenmailings macht. Es ist nicht völlig klar, ob diese Mailings jedes Mal an die Gruppe von Leuten gehen würden; Wenn ja, rufen Sie eines der regulären Mailinglisten-Programme ab.

Wenn nicht, ist die einfache Antwort ist

$ mail address -s subject < file 

einmal pro Mail.

Untersuchen Sie übrigens die Richtlinien von wer auch immer stromaufwärts von Ihnen im Netz ist. Manche ISPs sehen viele E-Mails als wahrscheinlichen Spam und können Sie überraschen, indem sie Ihren Internetzugang abschneiden oder messen.

+0

+1 für den Standard-Hinweis und ISP Überraschung! –

3

Ein paar tausend E-Mails pro Stunde sind nicht wirklich so viel, solange Ihr Postausgangsserver bereit ist, sie rechtzeitig zu akzeptieren.

Ich würde sie mit einem lokalen MTA, wie Postfix oder Exim (die dann senden würde sie durch Ihre ausgehende Relais, falls erforderlich) senden. Dieser Service ist dann verantwortlich für die Mail-Warteschlangen, Wiederholungen, Bounces usw. Wenn Sie nach mehr "Mailing-Listen" -Funktionen suchen, versuchen Sie, mailman in den Mix aufzunehmen. Es ist in Python geschrieben, und Sie haben es wahrscheinlich gesehen, wie es Tonnen von Internet-Mailing-Listen läuft.

+0

+1 In diesem Fall ist die Verwendung eines lokalen MTA erforderlich. – codeape

+0

Verwenden Sie einen lokalen MTA, überwachen Sie die Warteschlangenlänge und den Lieferstatus. – MarkR

0

Sie könnten Twisted Mail ausprobieren, um Ihr eigenes Backend in reinem Python zu implementieren.

2

Sie möchten vielleicht Lamson, einen in Python geschriebenen E-Mail-Server, der auf einem Zustandsrechner basiert, ausprobieren, der in der Lage sein sollte, das zu tun, was Sie beschrieben haben. Es wurde von Zed Shaw geschrieben und er hat kürzlich darüber gebloggt here.

Verwandte Themen