Вы можете использовать fetchmail следующим образом:
#!/bin/bash
while sleep 1
do
fetchmail --idle --mda python program_that_accepts_email_with_headers_on_stdin.py
done
Тогда Ваша программа может выполнять различные действия: от запросов к базе данных, с помощью некоторых служб http, до отправкиписьмо кому-то.Как это работает, сначала он спит секунду, а затем проверяет почтовый ящик в соответствии с настройками, которые необходимо поместить в ~ / .fetchmailrc (для получения информации о том, как это сделать, прочитайте man fetchmail
).Если он находит какое-либо электронное письмо, он вызывает вашу программу, если нет, и цикл возвращается к начальной точке.Если он не находит никаких писем, он ждет до тех пор, пока письмо не придет (или почтовый сервер не перезагрузится).
Суть в том, что если указанная система не загружена, он будет почти мгновенно реагировать на электронные письма (обычно вы отправляете электронное письмо с командой, ждете 3 секунды и у вас есть ответ в папке «Входящие»).
ПРИМЕЧАНИЕ: остановка (--idle
)работает только с серверами IMAP.С поп-серверами вы можете сделать то же самое, но спать 10 секунд вместо 1. Спать в течение 1 секунды хорошо, потому что ваша программа может быть сверхбыстрой и может создать бесконечный цикл с другой программой (например, демон mailer, говорящий, что кто-то в отпуске) иобычно было бы хорошо, по крайней мере, ограничить их безумие зацикливания до 1 электронной почты в секунду.Я научился этому нелегко :) Спать будет плохо, если вы захотите обрабатывать более 1 письма в секунду.Если это так, переключите sleep 1
на true
.