3 votes

Comment concevoir un système de courrier électronique ?

Je travaille pour une entreprise qui fournit une assistance à ses clients. J'essaie de concevoir un système qui enverrait automatiquement des courriels aux clients lorsqu'un événement se produit. Le système se compose d'une partie backend et d'une partie interface web. Le backend gérera la communication avec une interface web (qui ne sera utilisée qu'en interne pour modifier les modèles d'emails) et surtout, il vérifiera certaines tables de la base de données et, en fonction de ces résultats, enverra des emails ... beaucoup d'emails.

Je me demande maintenant comment concevoir ce système pour qu'il soit évolutif et qu'il fournisse les performances nécessaires, car il devra probablement traiter quelques milliers de courriels par heure (ce qui devrait être le maximum). Je suis surtout intéressé par la façon dont ce type d'architecture devrait être pensé afin d'être facilement extensible à l'avenir si nécessaire.

Python sera utilisé sur le backend avec Postgres et probablement ce qui viendra en premier entre un framework web Python et GWT sur le frontend (ce qui semble être la tâche la plus simple).

5voto

Charlie Martin Points 62306

Il s'agit d'un très bon candidat pour l'utilisation d'un logiciel standard. Il existe de nombreux logiciels libres de gestion de listes de diffusion ; ils savent déjà comment effectuer les envois en masse. Il n'est pas tout à fait clair si ces envois doivent être adressés à l même Si c'est le cas, procurez-vous l'un des programmes de listes de diffusion habituels.

Si ce n'est pas le cas, la réponse est simple

$ mail address -s subject < file

une fois par courrier.

D'ailleurs, renseignez-vous sur les politiques de la personne qui se trouve en amont de vous sur le net. Certains fournisseurs de services Internet considèrent que de nombreux courriers sont probablement des spams et peuvent vous surprendre en coupant ou en mesurant votre accès à l'internet.

3voto

JimB Points 9246

Quelques milliers de courriels par heure, ce n'est pas grand-chose, tant que votre serveur de courrier sortant est prêt à les accepter en temps voulu.

Je les enverrais en utilisant un mta local, comme postfix, ou exim (qui les enverrait ensuite à travers votre relais sortant si nécessaire). Ce service est alors responsable des files d'attente, des tentatives, des rebonds, etc. Si vous recherchez plus de fonctionnalités de type "liste de diffusion", essayez d'ajouter mailman au mélange. Il est écrit en python et vous l'avez probablement déjà vu, car il gère des tonnes de listes de diffusion sur Internet.

2voto

Mork0075 Points 3152

Il me semble que vous essayez d'optimiser le traitement par lots, où la chaleur ne se produit pas sur l'interface web mais dans le backend. Cela semble également être un travail pour une architecture de file d'attente.

Amazon offre des systèmes de file d'attente, par exemple, si vous avez vraiment besoin d'une échelle massive. Ainsi, vous pouvez ajouter plusieurs machines de votre côté pour délivrer les messages sous forme d'eMails. Ainsi, une seule machine ne peut prendre que 100 messages de la file d'attente à la fois.

Le modèle des systèmes de courrier électronique devrait être asynchrone ; jetez donc un coup d'œil à d'autres architectures asynchrones si vous n'aimez pas les files d'attente.

2voto

Ryan Duffield Points 7602

Vous pouvez également consulter Lamson J'ai créé un serveur de messagerie basé sur une machine d'État, écrit en Python, qui devrait être capable de faire ce que vous avez décrit. Il est écrit par Zed Shaw, et il a récemment publié un blog à ce sujet ici .

0voto

Anonymous Points 1568

Vous pouvez essayer Twisted Mail pour implémenter votre propre backend en Python pur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X