2009-02-17 11 views
9

Nous écrivons une fonctionnalité pour envoyer un courriel de rappel aux clients dans x nombre de jours et je me demandais s'il était possible de retarder l'envoi des courriels comme vous pouvez dans Outlook (Nouveau Mail> bouton Options> Ne pas livrer avant) en C#.Retarder l'envoi de courriels en C#

Est-ce que quelqu'un connaît une façon de faire cela?

Répondre

3

Une possibilité consiste à créer un service qui s'exécute sur une tâche planifiée traitant le courrier 'en attente'. Vous pouvez stocker le courrier en attente dans une base de données SQL. (Dave détails ce)

Cet article semble prometteur si vous souhaitez éviter un service « réel »

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

+0

J'ai décidé d'aller avec la méthode détaillée dans le lien ci-dessus et cela semble fonctionner correctement. Merci –

+0

De rien Chris – ccook

1

Le SmtpClient est un client assez stupide et ne supporte pas cela - les envois sont immédiats qu'ils soient synchrones ou asynchrones. Vous pouvez être en mesure de le faire en utilisant une intégration Exchange. Cependant, je ne suis pas sûr de savoir quelles API sont exposées pour Exchange. Le plus simple serait de conserver le message dans une table de base de données avec le time-to-send et d'avoir un processus hors ligne qui scanne régulièrement cette table et recherche les messages dont la valeur time-to-send est passée et non marquée comme envoyé.

+0

Hehehe les grands esprits se ressemblent :) –

+0

Vous pouvez dans EWS 2.0 qui me fait me demander s'il existe un en-tête spécial que vous pouvez définir pour faire la même chose via SMTP à un serveur Exchange: http://msdn.microsoft.com/fr -us/library/office/jj220496 (v = exchg.80) .aspx – kamranicus

9

Si vous souhaitez envoyer l'e-mail à un serveur SMTP pour une période de plusieurs jours, le serveur doit prendre en charge cette fonctionnalité. Je recommanderais de ne pas le faire de cette façon, cependant. Si vous avez un problème avec les emails manquants, il peut être difficile de les retrouver.

Voici ce que je ferais:

  1. Calendrier des e-mails dans votre système en faisant une entrée de table.
  2. Inclure une colonne « DateEnv » dans le tableau où vous pouvez définir une date à l'avenir
  3. Ecrire un service Windows qui se réveille une fois toutes les 15 minutes (par exemple) et envoie les e-mails dans cette table où DateEnv < currentDate
+0

C'est exactement ce que nous faisons pour notre site Web de support, pour informer les clients lorsqu'un incident qu'ils ont signalé est modifié. La seule différence est, nous utilisons un travail SQL Server pour envoyer le courrier au lieu d'un service. – Carl

+0

Moi aussi je fais ça. Il est beaucoup plus rapide d'insérer un e-mail dans une table de base de données et vous pouvez également conserver un enregistrement des e-mails envoyés. – GateKiller

3

n °

La façon d'y parvenir serait pour votre application écrire l'e-mail dans une file d'attente (peut être une base de données, un fichier, MSMQ, etc), puis écrire un processus séparé qui, à une date ultérieure, lit le courrier de cette file et l'envoie. Pour autant que je sache, le protocole SMTP ne dispose d'aucune sorte de fonction "envoi différé". En outre, la fonctionnalité que vous référencez dans Outlook ne fait que la conserver dans la boîte d'envoi de votre client jusqu'à la date spécifiée. Il s'agit donc d'une fonctionnalité côté client et non d'une fonctionnalité côté serveur.

Questions connexes