2010-09-20 5 views
1

J'écris une application et j'aimerais qu'elle soit en quelque sorte programmée pour envoyer un email à une date ultérieure (probablement une heure après son lancement) . Le langage de programmation sera Python ou Java.Planification d'un moment dans le futur pour envoyer un e-mail en Java ou Python

Tous les outils Open Source disponibles à cet effet?

EDIT: J'ai oublié de mentionner qu'il doit être exécuté après un test, donc l'application sera déjà en panne et je crois que la solution Quartz ne fonctionnerait pas. Serait-ce possible? Idéalement, j'aimerais entendre dire que le protocole SMTP a quelque chose de caché qui le permet, et qu'il suffirait d'ajouter un drapeau au message et que les fournisseurs de messagerie l'interpréteraient comme devant être envoyés plus tard.

+0

Quelle plateforme? Linux comme 'at'. Windows a quelque chose de similaire. –

+0

De préférence non spécifique à la plate-forme. Je cours linux –

+0

Quartz scheduler est un projet open source basé sur Java.Donc, sans JVM, la solution Quartz n'est pas possible. –

Répondre

3

Quartz est une grande bibliothèque Java pour les fonctions que vous souhaitez exécuter à un certain moment, après un certain intervalle de temps, etc.

Il y a aussi the Timer class in the JDK.

7

Quartz Scheduler peut être un utilisateur pour ce type de travaux asynchrones.

+2

+1 parce que la réputation de matt b de 26.4k peut vivre sans +1. :-) – Chris

+1

@Chris Si vous visez ce genre de réputation, gardez vos commentaires sur le sujet. :) – bzlm

+0

La question a été éditée pour indiquer que la JVM peut ne pas fonctionner au moment où les mails doivent être envoyés. –

2

Si vous utilisez Java, essayez Quartz, un framework de planification de travaux open source.

1

Je ne pense pas que le protocole SMTP standard possède une telle fonctionnalité, donc si vous voulez être indépendant de la plate-forme, vous devrez rechercher une autre solution. Que diriez-vous d'écrire votre message dans une file d'attente (base de données locale, par exemple) avec un horodatage, puis d'avoir un programme qui le regarde périodiquement et envoie des emails en attente?

Le délai est-il un timedelta exact ou est-il "1-2 heures plus tard"? Si c'est le dernier, que vous pouvez avoir un travail horaire (cronjob commençant chaque heure ou un travail de fond dormant pendant une heure), qui enverrait alors les email.

2

Vous pouvez créer l'e-mail à envoyer, en utilisant JavaMail (avec pièces jointes et toutes), enregistrez-le sur le disque, puis déléguez un "mail [email protected] < textfilefromjavamail" au système de traitement par lots Linux.

Il existe une commande "at" qui fera probablement exactement ce que vous voulez.

1

Réponse 1:

En Python, utilisez threading.Timer pour planifier à l'avenir; utilisez smtplib pour envoyer un courriel. Aucune bibliothèque externe requise.

Réponse 2:

On dirait que vous voulez que le programme d'envoi de quitter plutôt que de l'avoir attendu en arrière-plan. Vous pouvez utiliser cron pour cela. Alternative il suffit d'utiliser la commande unix sleep et mail:

$ { sleep 3600; echo "hello world" | mail -s the-subject destination-email; } & 

post-scriptum Je ne crois pas que SMTP ait quelque chose pour vous dans ce cas. Vous cherchez vraiment un MTA qui a la fonction de planification. Bien que je ne suis pas familier avec cela pour faire une recommandation.