Планирование времени для отправки электронной почты на Java или Python в будущем - PullRequest
1 голос
/ 20 сентября 2010

Я пишу приложение, и я хотел бы, чтобы оно каким-то образом запланировало отправку электронного письма на более поздний срок (вероятно, через час после его запуска). Язык программирования будет Python или Java.

Какие-нибудь инструменты с открытым исходным кодом, доступные для этой цели?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что он будет запущен после тестового запуска, поэтому приложение уже будет недоступно, и я думаю, что решение Quartz не будет работать. Возможно ли это?

В идеале, я хотел бы услышать, что в протоколе SMTP есть некоторые скрытые вещи, которые позволяют это, и просто потребуется добавить какой-либо флаг к сообщению, и поставщики электронной почты будут интерпретировать необходимость их отправки позже.

Ответы [ 6 ]

7 голосов
/ 20 сентября 2010

Кварцевый планировщик может быть пользователем для этого вида асинхронных заданий.

3 голосов
/ 20 сентября 2010

Quartz - это отличная библиотека Java для функций, которые вы хотите запускать в определенное время, через определенный промежуток времени и т. Д.

Существует также класс Timerв JDK .

2 голосов
/ 20 сентября 2010

Вы можете создать фактическое электронное письмо для отправки, используя JavaMail (с вложениями и всем), сохранить его на диск и затем делегировать «mail foo@bar.com

Существует команда "at", которая, скорее всего, будет делать именно то, что вы хотите.

2 голосов
/ 20 сентября 2010

Если вы хотите использовать Java, попробуйте Quartz , среду планирования заданий с открытым исходным кодом.

1 голос
/ 21 сентября 2010

Ответ 1:

В Python используйте threading.Timer для планирования на будущее; используйте smtplib для отправки электронного письма. Внешняя библиотека не требуется.

Ответ 2:

Звучит так, будто вы хотите, чтобы отправляющая программа завершила работу, а не ожидала в фоновом режиме. Вы можете использовать cron для этого. В качестве альтернативы просто используйте команду Unix sleep и mail:

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

P.S. Я не верю, что у SMTP есть что-то для тебя в этом случае. Вы действительно ищете MTA, который имеет функцию планирования. Хотя я не знаком с этим, чтобы давать рекомендации.

1 голос
/ 20 сентября 2010

Я не думаю, что стандартный протокол SMTP имеет такую ​​функцию, поэтому, если вы хотите быть независимым от платформы, вам придется искать другое решение.

Как насчет записи вашего сообщения в очередь (локальная база данных, например) с отметкой времени, а затем какой-то программой, которая периодически просматривает его и отправляет ожидающие электронные письма?

Является ли задержка точной временной шкалой или это "спустя 1-2 часа"? Если это последнее, то у вас может быть почасовая работа (cronjob, начинающийся каждый час, или фоновая работа, спящая в течение часа), которая затем будет отправлять электронные письма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...