Реализация интеллектуального реле с SMTP-сервером / клиентом
Мне нужно реализовать интеллектуальный список рассылки / реле (в Linux). Идея в том, что:
- Сервер получает электронные письма на адрес списка
- Он анализирует почту и подтверждает, что это из надежного источника
- Он ищет список получателей в локальной базе данных
- Он выполняет небольшую обработку входящей почты и отправляет ее в список
- Он возвращает любые сообщения об отказе оригинальному отправителю
На сервере уже установлен sendmail, но я могу использовать другой MTA при необходимости.
Это звучит просто, и sendmail уже имеет возможность поиска в базе данных. Однако я не думаю, что это особенно гибко, и я не хочу предоставлять sendmail независимый доступ к моей базе данных.
Наиболее близким к существующему решению является E-MailRelay, который выглядит неплохо, но я не хочу накладных расходов на его интеграцию, если смогу его избежать.
Я был бы признателен за проверку работоспособности моего Плана Б перед его началом или за альтернативные предложения. Я не нашел никаких полезных документов по этому вопросу, и книга Sendmail, похоже, не имеет к этому никакого отношения.
То, о чем я думаю, это:
- Внедрите агент доставки SMTP для sendmail, чтобы sendmail и DA работали на одном сервере, а DA прослушивал какой-то неуказанный порт (какой?)
- Предполагается, что Sendmail действует как SMTP-клиент при подключении к DA, и мой DA будет отвечать на команды MAIL/RCPT/DATA
- DA обрабатывает полученную почту, которая будет либо сообщением в список рассылки, либо отказом, либо, возможно, ответом
- Затем DA переключается в режим клиента, подключается к sendmail и выдает команды MAIL/RCT/DATA, чтобы вернуть ответ исходному отправителю.
Имеет ли это смысл? Благодарю.
1 ответ
Это оказалось довольно просто, хотя я не использовал агента доставки sendmail - я просто что-то делал в SMTP. Сервер имеет два IP-адреса, и sendmail уже прослушивает порт 25 на IP#1.
Я написал SMTP-прокси, который прослушивает порт 25 на IP#2. Это запускает SMTP-сервер, который принимает входящие сообщения и перезаписывает их. Затем он подключается (как клиент) к порту 25 на IP#1, отправляя переписанное сообщение на sendmail. Затем sendmail обрабатывает передачу по переписанным адресам назначения. Это все прозрачно для оригинального почтового клиента.
Не уверен, как бы я это сделал, если бы у сервера был только один IP-адрес.