Реализация интеллектуального реле с SMTP-сервером / клиентом

Мне нужно реализовать интеллектуальный список рассылки / реле (в Linux). Идея в том, что:

  1. Сервер получает электронные письма на адрес списка
  2. Он анализирует почту и подтверждает, что это из надежного источника
  3. Он ищет список получателей в локальной базе данных
  4. Он выполняет небольшую обработку входящей почты и отправляет ее в список
  5. Он возвращает любые сообщения об отказе оригинальному отправителю

На сервере уже установлен sendmail, но я могу использовать другой MTA при необходимости.

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

Наиболее близким к существующему решению является E-MailRelay, который выглядит неплохо, но я не хочу накладных расходов на его интеграцию, если смогу его избежать.

Я был бы признателен за проверку работоспособности моего Плана Б перед его началом или за альтернативные предложения. Я не нашел никаких полезных документов по этому вопросу, и книга Sendmail, похоже, не имеет к этому никакого отношения.

То, о чем я думаю, это:

  1. Внедрите агент доставки SMTP для sendmail, чтобы sendmail и DA работали на одном сервере, а DA прослушивал какой-то неуказанный порт (какой?)
  2. Предполагается, что Sendmail действует как SMTP-клиент при подключении к DA, и мой DA будет отвечать на команды MAIL/RCPT/DATA
  3. DA обрабатывает полученную почту, которая будет либо сообщением в список рассылки, либо отказом, либо, возможно, ответом
  4. Затем DA переключается в режим клиента, подключается к sendmail и выдает команды MAIL/RCT/DATA, чтобы вернуть ответ исходному отправителю.

Имеет ли это смысл? Благодарю.

1 ответ

Решение

Это оказалось довольно просто, хотя я не использовал агента доставки sendmail - я просто что-то делал в SMTP. Сервер имеет два IP-адреса, и sendmail уже прослушивает порт 25 на IP#1.

Я написал SMTP-прокси, который прослушивает порт 25 на IP#2. Это запускает SMTP-сервер, который принимает входящие сообщения и перезаписывает их. Затем он подключается (как клиент) к порту 25 на IP#1, отправляя переписанное сообщение на sendmail. Затем sendmail обрабатывает передачу по переписанным адресам назначения. Это все прозрачно для оригинального почтового клиента.

Не уверен, как бы я это сделал, если бы у сервера был только один IP-адрес.

Другие вопросы по тегам