Question

Je réfléchis à la gestion de l'envoi de gros volumes de courrier électronique à partir de mes applications Web et à la question de savoir s'il existe des meilleures pratiques pour le faire. StackOverflow l'a déjà qualifié de "subjectif", ce qui peut être dans une certaine mesure, mais j'ai besoin de connaître le moyen le plus efficace de mettre en œuvre ce système ou de savoir s'il existe une approche normalisée.

Dans mon application Web, il y a des utilisateurs qui sont à la tête de groupes de 1 à 10 000 utilisateurs. Cet utilisateur doit pouvoir envoyer un message électronique à tous ces utilisateurs par le biais de mon système. Par conséquent, mon système est responsable de l'envoi de 10 000 courriers électroniques à des utilisateurs individuels pour chaque tête de groupe.

Autant que je sache, il n’ya pas de limite de débit dans GMail pour l’envoi de messages à des particuliers (bien qu’il y ait un maximum de 500 destinataires).

À l'heure actuelle, ma configuration actuelle est la suivante:

  • Lorsqu'un message est envoyé via le système, il entre dans une file d'attente de courrier électronique.
  • Un script cron extrait les messages de la file d'attente toutes les quelques minutes et les envoie.
  • Tous les courriers électroniques sont transmis via le serveur SMTP de GMail.
  • L'application qui effectue le mailing est PHPMailer.

Cette configuration, à mesure que la base d'utilisateurs s'agrandit, ne sera probablement pas suffisante. Mes questions sont:

  1. Devrais-je utiliser un serveur SMTP local à la place?
  2. Devrais-je utiliser un binaire mail sur la machine locale? Dans ce cas, je pourrais probablement sauter complètement la file d'attente?
  3. Existe-t-il un moyen accepté de le faire?

Merci!

Était-ce utile?

La solution

Si le nombre d'e-mails est "élevé" 10.000 par jour, je ne compterais pas sur SMTP de GMail (ou de tout autre). Pas qu'ils ne peuvent pas gérer ça, évidemment, ils peuvent en gérer BEAUCOUP plus. Mais ils ne veulent peut-être pas.

Avoir un serveur SMTP local est la meilleure solution à suivre:

  • Il est assez facile à configurer (ne laissez pas les gens l’utiliser sans un système d’authentification puissant)
  • La plupart des MTA modernes gèrent très bien l'envoi des files d'attente
  • Vous n'avez pas à faire face à GMail (ou à d'autres) qui décident de bloquer votre compte un jour pour des raisons de quota

Autres conseils

Google App Engine

J'écrirais ceci dans le moteur d'applications Google (python) car:

  • Cela évolue bien.
  • Il a une bonne adresse email.
  • Il dispose d'une tâche avec une bonne API pour y accéder.
  • Parce que le python est une très belle langue.
  • C’est (relativement) bon marché.

PHP

Si je l'implémentais en PHP, je le ferais

  • Trouvez-vous un bon serveur SMTP qui vous permettra d’envoyer ce volume de courrier, car Gmail ne vous autorisera pas à envoyer ce type de volume. Je suis sûr que cela vous coûtera de l'argent.
  • Trouvez-vous une bonne bibliothèque de courrier électronique PHP pour envoyer des messages avec, par exemple, PHPMailer, comme vous l'avez dit.
  • Utilisez une file de messages, comme par exemple beanstalkd, pour mettre les messages en file d'attente et les envoyer de manière asynchrone. D'abord parce que, avec cela, l'utilisateur aura un chargement de page plus appétissant. Deuxièmement, avec une file de messages comme beanstalkd, vous pouvez régler la vitesse d’envoi mieux, ce qui vous évitera de surcharger votre ordinateur de travail. Vous aurez besoin d’un accès ssh au serveur pour compiler (installer) beanstalkd. Vous pouvez trouver beanstalkd à l'adresse beanstalkd
  • Vous aurez également besoin d'un accès ssh pour exécuter un script PHP en arrière-plan qui traitera la file d'attente des messages. Vous pouvez trouver un beanstalkd-client sur php beanstalkd-client

depuis php / apache / page web

Il s'agit de la page à partir de laquelle vous enverrez des messages à l'utilisateur. À partir de cette page, vous enverrez un message à beanstalkd en codant quelque chose dans les lignes suivantes:

// 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);

Vous devez mettre les messages en file d'attente à l'aide de la commande put

À partir d'un script PHP long en arrière-plan:

Le code ressemblerait à quelque chose comme ceci:

// 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);
}

Comme je le dis, c’est possible avec PHP et le moteur d’applications Google, mais j’aimerais opter pour le moteur d’applications, car il est plus facile à implémenter.

Gmail et Google Apps vous limitent à environ 500 e-mails par jour. Je ne sais pas comment cela se combine avec le nombre maximum de 500 destinataires, mais si vous souhaitez envoyer 10 000 emails, vous voudrez probablement trouver un autre serveur de messagerie. J'utilise personnellement un serveur local ou le SMTP du fournisseur de services Internet ou du centre de données.

Si vous envoyez autant d'e-mails, nous vous recommandons d'utiliser la file d'attente afin que l'utilisateur ne reste pas assis à attendre l'envoi de l'e-mail.

Faites très attention à ce que votre domaine ne soit pas sur la liste noire des spams. Si tel est le cas, vous pouvez vous attendre à ce que la plupart de vos e-mails soient bloqués, support, ventes, etc., ce qui pourrait coûter très cher.

Vous pouvez utiliser un service tel que AWeber . Non seulement ils sont configurés pour gérer ces quantités d’e-mails, mais ils peuvent probablement vous donner plus de métriques que vous ne pouvez en implémenter vous-même.

Je ne sais pas si c'est publié n'importe où, mais l'expérience me permet de vous dire que Gmail gèlera votre compte une quinzaine de minutes si vous commencez à envoyer des centaines de messages à la fois. Cela m'est arrivé la semaine dernière. Je pense que vous devriez héberger votre propre serveur SMTP. L'utilisation de la fonction mail () mettra souvent votre courrier dans le dossier spam de quelqu'un.

Installez simplement Postfix sur la machine locale ou sur une même machine du même réseau local pour une vitesse d’accès maximale Assurez-vous qu'il est bien sécurisé de l'extérieur et rapidement accessible de l'intérieur.

Codez ensuite votre script PHP pour injecter directement les courriels dans la file d'attente Postfix. Cela augmentera considérablement la vitesse de traitement du courrier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top