Я хотел бы хранить копию каждого электронного письма, которое проходит через мой 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