Я ищу решение для ограничения количества писем, отправляемых конкретному оператору электронной почты (несколько доменов верхнего уровня, все они известны мне) на почасовой основе. Мне также нужен способ контролировать скорость для каждой почты, чтобы разрешить большее количество электронных писем, отправляемых по postfix в течение каждого часа. Лимит является глобальным для всех адресов, обслуживаемых этим оператором, сбрасывается каждый полный час.
Я использую настраиваемый фильтр postfix after_queue, ища наш настраиваемый заголовок, указывающий приоритет. Количество писем, принятых фильтром, хранится вне скрипта в базе данных PostgreSQL. Письма, соответствующие текущей квоте таймфрейма, передаются в postfix как принятые, сообщения вне квоты откладываются с использованием кода возврата tempfail.
Ретранслятор SMTP, используемый для отправки электронной почты этому конкретному оператору, представляет собой отдельную виртуальную машину, используемую только для ограниченных электронных писем и отказов от оператора. Эффективность настраиваемого фильтра достаточно хороша в соответствии с требованиями.
В основном есть две проблемы:
Из настраиваемого фильтра после очереди, вместо того, чтобы возвращать сообщение в очередь постфиксов, просто отправьте его непосредственно на SMTP-адрес назначения с помощью другого инструмента и полностью пропустите постфикс. Я не знаю, есть ли в Linux готовый к использованию smtp-клиент для решения таких задач. Кроме того, нам необходимо обрабатывать сообщения о недоставке как синхронно (как ответ в SMTP-коммуникации), так и асинхронно (как сообщения о статусе, отправленные на адрес Return-Path). Нам также необходимо контролировать Return-Path, чтобы такой инструмент указывал на отправку электронной почты с сервера.
Как последний шанс, идея состоит в том, чтобы развернуть собственный SMTP-сервер или, возможно, изменить исходный код sendmail / postfix в соответствии с нашими потребностями. Это перебор, пока не будет другого варианта.
Какой инструмент Linux может немедленно (без очереди) ретранслировать электронную почту на SMTP-сервер получателя и предоставлять действительные сообщения о недоставке? Или, если есть лучшее решение этой проблемы, какие инструменты мне следует искать?
Вопрос
Какой инструмент Linux может немедленно (без очереди) ретранслировать электронную почту на SMTP-сервер получателя и предоставлять действительные сообщения о недоставке? Или, если есть лучшее решение этой проблемы, какие инструменты мне следует искать?
Сам постфикс имеет МНОЖЕСТВЕННЫЙ ЭКЗАМЕН характерная черта. Это позволит вам определить отдельный экземпляр постфикса, у которого есть собственная очередь и файл конфигурации. Вы можете использовать этот экземпляр как последнюю цепочку обработки SMTP. И да, поскольку у него есть отдельная очередь, этот специальный экземпляр может отправлять вашу электронную почту, не дожидаясь и не возясь с другой очередью.
Чтобы установить приоритет доставки данного почтового сообщения, вы можете периодически использовать grep для элементов в отложенной очереди, чтобы прочитать свой настраиваемый заголовок и создать список сообщений, которые необходимо доставить сейчас. Для каждого ожидающего сообщения в этом списке выполните команду ниже.
postqueue -i queueid
Это должно заставить postfix попытаться доставить почту с заданным queueid.
Это может быть или не быть практичным в зависимости от объема почты и производительности системы. Однако вам нужно будет учитывать рост вашей системы и тестировать максимальную пропускную способность, с которой ваша система должна справиться.
Заметка. В Centos содержимое отложенной почты хранится в следующем каталоге.
/ var / spool / postfix / отложенный
Взгляните на демон политики постфикса. У этого есть квоты, которые работают так, как вы описываете.
https://www.policyd.org/content/features