Je dois écrire une demande d'envoi d'une newsletter. Quelle est la meilleure façon d'envoyer les thounds des utilisateurs d'un bulletin d'information? Ma condition est p>
est bon d'utiliser la classe de courrier SMTP de .NET? J'ai l'air d'avoir envie de faire des questions pour que cela ne puisse pas décider quelle approche que je devrais aller? Il y a beaucoup de suggestions p>
Quelqu'un peut-il suggérer un bon moyen d'imager cela? p>
5 Réponses :
J'ai écrit des pages qui envoient des courriels, mais pas le volume de votre volume. Néanmoins, je recommanderais ce qui suit sur le code que j'ai mis en œuvre dans le passé: p>
Utilisez l'application Web pour écrire l'e-mail et toutes les adresses de destinataires à la table (s) de base de données. P> LI>
Avoir un processus en dehors de ASP.NET en train d'envoyer les courriels. Cela pourrait être un fichier VBS configuré comme une tâche planifiée ou (de préférence) un service Windows. Le processus prendrait le texte de l'e-mail, appendez le lien de désabonnement et une fois envoyé, signalez avec succès l'enregistrement de base de données comme envoyé. De cette façon, si l'envoi échoue, il peut réessayer plus tard (les boucles de processus d'envoi sur tous les enregistrements marqués comme insensés). P> LI>
Si vous avez besoin d'un journal de ce qui a été envoyé et quand, il vous suffit de conserver les enregistrements envoyés dans les tables de base de données. Sinon, supprimez simplement les enregistrements une fois envoyés avec succès. P> li> ul>
IMHO Envoi d'emails au sein du processus de travailleur ASP.NET est une mauvaise idée car vous ne savez pas combien de temps il faudra et si l'envoi échoue, il y a peu de possibilités de réessayer avant la sortie de la page. P>
Je ne recommanderais pas la page Web ASP.NET à envoyer, même si vous le démarrez dans un fil d'arrière-plan séparé. Je penserais que vous exécutez le risque de recyclage du serveur de votre processus au milieu de l'envoi, ce qui le gâcherait. Vous devez vraiment écrire une sorte de service ou une application distincte pour envoyer vos courriels.
L'option la plus simple serait de créer une console rapide et sale. P>
La journalisation est également essentielle comme l'autre affiche indiquée. Si cela échoue, vous voulez savoir exactement ce qui a été envoyé et où il s'est arrêté de sorte que lorsque vous le redémarrez, vous ne postez pas de courrier que toutes les personnes qui travaillaient à nouveau. Vous souhaitez pouvoir saisir le point de départ de l'envoi, donc si vous devez redémarrer au numéro par courrier électronique # 5000, vous pouvez. P>
Les classes de l'espace de noms System.net.Mail fonctionneront parfaitement pour l'envoi Votre courrier. P>
L'un des plus gros problèmes trouvera un hôte de courrier électronique qui vous permettra d'envoyer autant d'emails. La plupart des hôtes de messagerie ont une étranglement et des changements quelque temps en fonction des conditions du serveur, de sorte que si le serveur est fortement utilisé, les limites de courrier électronique seront plus restrictives et que vous ne serez peut-être pas à définir 500 courriels par heure. P>
Nous avons une lettre d'information qui s'étend sur environ 20000 personnes en tant que courriels séparés et nous avons dû jouer avec le retard entre les courriels jusqu'à ce que nous ayons trouvé un qui fonctionnerait pour notre hôte de courrier électronique. Nous avons fini par 1,2 sec entre courriels, ce qui pourrait être un bon point de départ. p>
Je pense qu'il existe des hôtes de messagerie spécialisés dans les envois en vrac si vous en obtenez un problème. P>
Aussi si vous hébergez votre propre courrier électronique. un problème. Et si vous hébergez votre propre courrier, vous aurez la possibilité de supprimer le courrier dans le répertoire de pick-up et vous pourrez simplement la jeter de là aussi vite que vous le souhaitez, et laissez le service de messagerie le ramasser à son propre rythme. < / p>
edit: Voici les paramètres à ajouter au fichier de configuration pour définir le répertoire de prise en charge p>
Bonjour Cris, merci de réponse. Nous avons notre propre serveur Exchange. Je me demande comment puis-je laisser tomber le courrier dans le répertoire de prise en charge?
Dans l'élément de messages de messagerie du fichier de configuration, vous pouvez modifier la méthode de livraison. Vous pouvez également le faire par programme. msdn.microsoft.com/en-us/library/ms164240.aspx
Merci cris je vais le donner essayer
Ne faites certainement pas cela dans ASP.NET. C'est l'une des plus grandes erreurs que les nouveaux développeurs Web font. P>
Ceci doit être une application ou un service Windows pouvant gérer ce volume beaucoup. P>
Créer une page Web pour "concevoir" la newsletter à. Lorsqu'ils ont touché l'envoi, la file d'attente de la newsletter jusqu'à quelque part (base de données) et utilisez un autre programme (service Windows, etc.) pour envoyer la lettre en file d'attente. Ce sera plusieurs fois plus efficace et potentiellement tolérante de panne si conçus correctement. P>
J'ai écrit un module d'information (dans le cadre d'un plus grand système) dans ASPnet MVC 2, Cadre d'entité et à l'aide de l'espace de noms System.net.Mail. Il est coupé en vue et se déroule actuellement dans un contrôleur avec une méthode de support pour faire l'envoi. Comme chaque courriel est envoyé, je suive s'il existe une bouce difficile (une exception étant lancée) et je mettez à jour cet enregistrement de base de données indiquant l'échec à l'exception, sinon je mettez à jour le succès indiquant le succès. Nous faisons également la personnalisation, nous avons donc des "balises" qui sont remplacées par un champ supplémentaire dans la base de données (stockée sous forme de XML pour la flexibilité). Cela aide à gérer une fonction de désinscription. P>
Mon code est assez simple (s'il vous plaît ne me flânez pas pour utiliser une manipulation des exceptions comme logique commerciale;) et cela fonctionne comme un charme. P>
Tout cela est fait sur un VPS à http://maximasp.com qui héberge également 4 sites avec assez décent circulation. Nous utilisons leurs serveurs SMTP. Nous avons notifié que nous avions besoin de ce service et que nous n'avons eu aucun problème de relation-sage. P>
Nous avions 2 Go de RAM sur la machine exécutant Windows 2008 et il faisait 6 courriels / secs. Nous l'avons heurté jusqu'à 3 Go lorsque les sites Web avaient besoin et maintenant le mailout fait environ 20emailils / sec. Nos mailouts vont de 2 000 à 100 000 adresses électroniques. P>
En bref, ASP.NET peut être utilisé pour gérer un mailout, et si vous ajoutez une logique à la gestion de l'enregistrement à la mise à jour de l'enregistrement de perdre votre chemin à mi-été est atténuée. Oui, il y a probablement des façons slickers de faire cela. Nous cherchons à MQMS et à la filetage et à la séparation du service Windows pour le rendre plus stable et plus évolutif, car nous mettons davantage de clients et de plus grandes listes sur, mais pour l'instant, cela fonctionne simplement bien avec une déclaration raisonnable et une manipulation des erreurs. P >
FYI Nous avons repoussé à nouveau la RAM à 4 Go (Gotta aiment les environnements virtuels) et pompons maintenant 35EmailS / Sec. Il se révèle être une configuration très stable. Vous pouvez parcourir de la page et revenir plus tard pour voir le rapport. Nous avons ajouté des notifications de courrier électronique simples du moment où certains pourcentages de l'envoi ont également été achevés. Nous avions prévu d'ajouter une file d'attente plus sophistiquée, mais elle gère la charge sans aucun hoquet. N'ayez pas peur d'utiliser un serveur Web .NET pour gérer les grandes mailouts!