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

Пропустить исходящую электронную почту Exim через скрипт перед отправкой?

Я запускаю сервер cPanel. Этот сервер был недавно взломан, и рассылался спам, поэтому я хотел бы отслеживать каждое электронное письмо, которое отправляет Exim.

Можно ли заставить exim запускать скрипт перед помещением электронного письма в очередь?

Я хочу, чтобы Exim отправлял заголовок «From:» скрипту Python. Этот скрипт будет отслеживать, сколько писем отправил этот домен за 1 час, и либо разрешить отправку письма, либо заблокировать учетную запись cPanel.

Я пробовал делать это с transport_filter и system_filter, но мне это не удалось.

Как я могу заставить Exim отправлять исходящую электронную почту скрипту Python для обработки?

Самый простой способ - создать роутер, проверяющий заголовки отправляемого сообщения. Если там НЕТ какого-то специального заголовка (например, X-Spam-My-Approval), сообщение направляется на транспорт с прикрепленным к нему конвейером. Сценарий на другой стороне канала выполнит всю магию и добавит секретный заголовок в сообщение, а затем отправит его снова. Теперь маршрутизаторы передают его транспорту с драйвером SMTP.

begin routers
pass2script:
  driver    = accept
  transport = myscript
  domains   = !+local_domains
  condition = ${if ! eq{$header_X-Spam-My-Approval:}{YES}} # header is absent or not "YES"

passaway:
  driver    = accept
  transport = relay
  domains   = !+local_domains
  condition = ${if eq{$header_X-Spam-My-Approval:}{YES}}

Соответствующие транспорты должны быть такими:

begin transports
myscript:
  driver  = pipe
  command = /path/to/script --option1 --option2

relay:
  driver  = smtp
  headers_remove = X-Spam-My-Approval
  . . . . . .

Имейте в виду, что exim должен иметь достаточно прав для запуска сценария, а сценарий должен иметь соответствующий EUID, указанный в файле exim. trusted_users config, чтобы иметь возможность отправить сообщение от имени произвольного отправителя.