2012-11-12 7 views
1

J'ai l'application ASP.NET MVC et j'ai besoin d'envoyer un email en "X" minutes (pour chaque utilisateur temps est différent) à l'utilisateur après qu'il quitte la page. Comment puis-je le faire?Comment envoyer un email avec retard?

+0

hmm. Ça ne va pas être simple. Vous pouvez simplement implémenter un travail cron, avoir une url envoyer l'email et appeler cette URL X minutes de votre serveur. Cela ne fonctionnera que si vous avez un peu de contrôle sur votre serveur. Ou, si vous avez un trafic correct, à chaque nouvelle demande, vous vérifiez les enregistrements précédents pour voir si ces minutes sont passées et ensuite vous envoyez votre courrier. – gideon

+0

Cela devrait être délégué à un service quelconque. –

+0

Downvotes devrait être commenté. Je ne vois rien de mal à la question. Si vous pensez que la solution sera difficile, cela ne signifie pas que la question est mauvaise. Je peux clairement comprendre exactement ce qu'il demande. – AaronLS

Répondre

3

Http est sans état et la réponse de temps est envoyée l'exection de la page est terminée. Vous avez besoin d'un application that will be sending mail even website is not accessed by some body for a significant time interval. Vous pouvez mettre les mails qui doivent être envoyés après un intervalle de temps dans la base de données. Une autre application pourrait être un service Windows qui regroupera la base de données après un intervalle de temps fixe soit disons 30 secondes et enverra les mails ayant atteint l'heure d'envoi.

+0

Je suis d'accord. Si ces e-mails sont importants, il est important de les placer dans une table de base de données, afin que votre service qui lit la table et envoie des e-mails puisse le faire dans une transaction. Si vous n'avez pas utilisé de base de données et les avez mis en file d'attente dans une sorte de service, alors ils n'existent qu'en mémoire jusqu'à ce que le temps s'écoule et qu'ils soient envoyés. Ainsi, si le service tombe en panne, l'e-mail en attente sera perdu. Cela dépend de l'importance de ces courriels. Il serait également mieux que d'avoir le service de suivre les courriels. Au lieu de cela, il interroge simplement la table et voit lesquels SendAtTime <= DateTime.Now (ou UTC?) – AaronLS

1

La solution que je choisirais dépend de l'échelle et de la fiabilité requises du système que vous construisez.

Si c'est une échelle réduite (ie 1 serveur avec pas trop d'utilisateurs en même temps), système non critique (ie c'est correct si de temps en temps certains emails ne sont pas réellement envoyés, par exemple si votre serveur plantage), alors la solution peut être aussi simple que de gérer une file d'attente en mémoire avec un fil qui se réveillerait périodiquement pour envoyer des courriels aux utilisateurs qui ont récemment quitté la page.

Si vous avez besoin de construire quelque chose qui serait très fiable et qui pourrait potentiellement envoyer un très grand nombre de courriels dans un court laps de temps, et si votre système doit évoluer vers un grand nombre de machines, alors vous voudriez construire une solution basée sur une file d'attente dans un stockage, où autant de machines que nécessaire sélectionnaient des éléments et les manipulaient. Une API telle que Windows Azure Queue Service peut être un bon choix si vous avez besoin d'une très grande échelle et d'une grande fiabilité.