Как я могу задержать доставку почты через SMTP-ретранслятор, возможно sendmail - PullRequest
0 голосов
/ 07 мая 2009

У меня есть требование отложить доставку почты через SMTP Relay.

т.е.

Почтовое сообщение успешно получено в момент времени T. Переадресация сообщения в пункт назначения в момент времени T + 4 часа.

Возможно ли это в sendmail или любом другом SMTP-реле.

Платформа развертывания - IBM AIX.

1 Ответ

2 голосов
/ 07 мая 2009

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

Если вы просто хотите доставлять почту каждые четыре часа, вам нужно запустить sendmail в режиме только очереди (QUEUE_MODE = "cron"; в sendmail.conf) и настроить очередь на запуск каждые четыре часа (QUEUE_INTERVAL = "4h";). Я думаю, это относится только к системам, подобным debian, но принцип везде одинаков - вы устанавливаете режим очереди на cron (это фактически контролируется аргументами, с помощью которых вы запускаете sendmail), а затем периодически обрабатываете его.

Если вы хотите просто отложить доставку почты, есть также несколько способов сделать это, в зависимости от , почему вы хотите это сделать. Одним из популярных решений является greylisting , оно делает только следующее - когда хост подключается к вашему MTA (sendmail, f.ex.), он получает сообщение о попытке повторить попытку через некоторый промежуток времени. Правильно настроенный почтовик просто сделает это - он попытается отправить письмо снова, и в конечном итоге сообщение будет принято и доставлено (или переслано). С другой стороны, большинство спам-ботов не будут пытаться повторно отправить сообщение при получении ошибки. Если вам нужен серый список на sendmail, вы можете прочитать здесь: http://www.greylisting.org/implementations/sendmail.shtml

Надеюсь, это помогло хоть немного.

EDIT:

Хорошо, теперь сейчас Я понимаю, что вам нужно делать. Вот возможное решение с использованием sendmail (я уже несколько лет так или иначе имею дело с sendmail, так что ..: P): Вы используете два из них.

Первый просто получает почту и ставит ее в очередь и (и это важно) НЕ получает возможность обрабатывать очередь. Второй экземпляр sendmail запускает отдельную очередь, и для его QUEUE_MODE установлено значение daemon или cron (скажем, каждую минуту). Теперь все, что вам нужно, это написать внешний скрипт, который переместит почту из первой очереди во вторую, как только будет достигнут «возраст» сообщения. Поскольку элементы очереди - это просто файлы, это простая задача, выполняемая в несколько строк, скажем, perl (черт, сценарий оболочки тоже может это делать). Перемещение элементов очереди из очереди в очередь так же просто, как перемещение файлов из каталога в каталог. Обратите внимание, что этот метод широко используется в решениях для обработки почты, таких как, например, spamassassin, так что это не какая-то странность, вызванная моим покойным умом: P

Надеюсь, это даст вам подсказку или два.

...