Назад | Перейти на главную страницу

Как ограничить количество писем, отправляемых с помощью postfix на определенные домены, и управлять им с помощью почтового заголовка?

Цель

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

Что я сделал до сих пор

Я использую настраиваемый фильтр postfix after_queue, ища наш настраиваемый заголовок, указывающий приоритет. Количество писем, принятых фильтром, хранится вне скрипта в базе данных PostgreSQL. Письма, соответствующие текущей квоте таймфрейма, передаются в postfix как принятые, сообщения вне квоты откладываются с использованием кода возврата tempfail.

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

Проблема

В основном есть две проблемы:

  1. Я не смог найти способ приоритизации сообщений электронной почты в очереди postfix. Было бы предпочтительнее, если бы я мог использовать наш настраиваемый заголовок в качестве индикатора приоритета или добавить еще одну отметку приоритета к сообщению электронной почты и гарантировать, что оно будет отфильтровано и отправлено перед неприоритетными сообщениями. Я думал об использовании нескольких экземпляров (postmulti), но приоритеты должны быть относительными, числовыми - они используются как модификатор квоты для исходящей почты. В основном: электронная почта с приоритетом N использует 1 / N квоты, используемой электронной почтой без приоритета. Приоритезация - полезная функция, поэтому мы можем обойтись без нее, если временные квоты работают правильно.
  2. Из-за того, что электронные письма возвращаются в очередь после применения фильтра, мы не гарантируем, что электронное письмо будет действительно отправлено в те сроки, в которые оно было принято. Очередь Postfix кажется невозможной для управления реальной пропускной способностью.

Моя идея решения

Из настраиваемого фильтра после очереди, вместо того, чтобы возвращать сообщение в очередь постфиксов, просто отправьте его непосредственно на 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

http://wiki.policyd.org/quotas

http://signalboxes.net/howto/policyd/