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

Exim перехватывает выполнение shadow_transport, но данные не добавляются в файл

Я хотел бы хранить копию каждого электронного письма, которое проходит через мой exim SMTP в базе данных PostgreSQL. Мне нужна основная информация:

From, To, CC, BCC and email body

поскольку мне может потребоваться его проверка менеджерами компании, если есть подозрительные действия. (Конфиденциальность не является проблемой там, где я живу!)

Я установил shadow_transport для этого:

Конфигурация Exim:

maildir_home:
  debug_print = "T: maildir_home for $local_part@$domain"
  driver = appendfile
  .ifdef MAILDIR_HOME_MAILDIR_LOCATION
  directory = MAILDIR_HOME_MAILDIR_LOCATION
  .else
  directory = $home/Maildir
  .endif
  .ifdef MAILDIR_HOME_CREATE_DIRECTORY
  create_directory
  .endif
  .ifdef MAILDIR_HOME_CREATE_FILE
  create_file = MAILDIR_HOME_CREATE_FILE
  .endif
  delivery_date_add
  envelope_to_add
  return_path_add
  maildir_format
  .ifdef MAILDIR_HOME_DIRECTORY_MODE
  directory_mode = MAILDIR_HOME_DIRECTORY_MODE
  .else
  directory_mode = 0700 
  .endif
  .ifdef MAILDIR_HOME_MODE
  mode = MAILDIR_HOME_MODE
  .else
  mode = 0600 
  .endif
  mode_fail_narrower = false
  shadow_transport = save_to_db

save_to_db:
  debug_print = "PG: $sender_address"
  driver = pipe 
  command = /usr/sbin/exim_save_to_db "test" "test2"
  user = Debian-exim
  group = mail 

Это простой скрипт, который добавляет test и test2 к /tmp/eximtest файл, который я расширю, когда он заработает.

Сценарий:

#!/bin/sh
# Get data from exim server and save to postgres database for future reference
# Args: 1->recipients (from to bcc etc ) 2->emailbody
echo "$1" >> /tmp/eximtest
echo "$2" >> /tmp/eximtest

# return 0 as success for Exim
echo 0

Бег exim_save_to_db из командной строки с любыми двумя аргументами выполнит свою работу. Из exim этого не произойдет, хотя в журналах я обнаружил, что теневой транспорт был выполнен:

R=local_user T=maildir_home ST=save_to_db

Я также добавил debug_print = "PG: $sender_address" чтобы увидеть, что что-то происходит в журналах, но сообщение не печатается.

Перехватывать сообщения и передавать их произвольной команде

exim.conf:

system_filter = /etc/exim/system_filter.conf

system_filter.conf:

if $h_subject contains "PIPETEST"
then
  unseen pipe "/usr/local/bin/pipetest_filter.php $message_size"
endif