Как настроить postfix для хранения электронной почты в файле, а не ретранслировать ее?


9

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

Я могу настроить код так, чтобы он использовал фиктивный отправитель электронной почты, но я хотел бы запустить тот же код, что и в производственной среде. Я могу использовать другой MTA (Postfix - это то, что мы используем в производстве), но я бы хотел что-то, что легко настроить в Debian / Ubuntu :)

Итак, я хотел бы настроить локальную установку Postfix для хранения всей электронной почты в (одном или нескольких) файлах вместо ее передачи. На самом деле, мне все равно, как оно хранится, если возможно проверить отправленную электронную почту. Даже установленный параметр, который сообщает postfix, чтобы держать электронную почту в почтовой очереди, работал бы (я могу очистить очередь, когда я перезагружаю промежуточный сервер с копией из производства).

Я знаю, что это возможно, я просто не нашел ни одного хорошего решения в Интернете для того, что кажется довольно распространенной потребностью.

Спасибо!

Ответы:


12

Я создал новый транспорт с помощью команды pipe, которая записывает электронную почту в файл.

В принципе:

  1. Создайте пользователя, которому будет принадлежать электронная почта (или использовать существующий). Я назвал мойemail
  2. mkdir /home/email/bin
  3. Поместите следующий скрипт в него /home/email/bin/mail_eater(он использует PHP, но вы можете написать свою собственную версию на любом языке, который вам нравится, он просто добавляет stdin в файл):

    #!/usr/bin/php
    <?php
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    $fh = fopen('/home/email/email.txt','a');
    fwrite($fh, $email."\n-------------------------------------------------------\n\n");
    fclose($fh);
    
  4. chmod a+x /home/email/bin/mail_eater
  5. touch /home/email/email.txt
  6. chmod a+r /home/email/email.txt
  7. Создайте новый транспорт, используя этот файл, добавив следующую строку в master.cf:

    file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
    
  8. Используйте это как транспорт по умолчанию в main.cf:

    default_transport = file_route
    

Там :)


3

Вы можете поместить эти домены $mydestinationв main.cf, так что postfix доставит их локально.

Вы можете настроить различных локальных пользователей, если хотите, или можете настроить локальный универсальный адрес для доставки писем только в одну учетную запись, подробности здесь: http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay

Для всех доменов:

mydestination = pcre:/etc/postfix/mydestinations

и /etc/postfix/mydestinationsдолжен содержать

/.*/    ACCEPT

Я не могу проверить прямо сейчас, но это должно работать.


Я не знаю, как выглядят домены назначения (они взяты из реальной базы данных клиентов). Я проверю ссылку, хотя.
GomoX

Спасибо за обновление, я опубликовал свое собственное решение проблемы, так как оно кажется «чище», но, похоже, ваше решение должно работать.
GomoX

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

2

попробуйте (в main.cf):

defer_transports = smtp

Вы можете увидеть очередь postqueue -pи смотреть контент сpostcat


0

В зависимости от вашего дистрибутива, вы можете посмотреть на «nullmailer». Это ретранслятор MTA, который передает другой SMTP в вашей сети или удаленно. Это вполне может быть недопустимый SMTP, и в этом случае он, вероятно, поместит его в очередь в папке на машине.

В Debian и Ubuntu это доступно в качестве замены MTA для вашей системы.


0

Это скопировано и немного изменено из моего блога http://blog.malowa.de/2011/04/postfix-as-spam-trap-server.html :

Вам даже не нужно настраивать Postfix, чтобы он действовал как nullmailer. Postfix поставляется с аккуратным инструментом под названием, smtp-sinkкоторый делает свое дело. smtp-sink в основном предназначен для тестирования SMTP-клиентов, которым необходим сервер для работы. Таким образом, вы можете настроить его на запись всего разговора или даже на дамп каждого полученного письма в файл. Последний нужен для нольмейлера.

Нет файла конфигурации для настройки smtp-раковины. Все делается с помощью параметров командной строки.

smtp-sink -c -d "%Y%m%d%H/%M." -f . -u postfix -R /tmp/ -B "550 5.3.0 The recipient does not like your mail. Don't try again." -h spamtrap.example.com 25 1024

Давайте подробнее рассмотрим каждый параметр.

-u postfix
Runs the program under the user "postfix"
-R /tmp/
Sets the output directory to /tmp/. In this directory the mails will be stored. If you have a high spam volume (hundreds of Spam per minute) it is recommended to write the mails to a ramdisk
-d "%Y%m%d%H/%M."
Writes the mail to a directory of the format "YearMonthDayHour" and in this directory the files are name "Month.RandomID". Note that the dates are in UTC
-c
Write statistics about connection counts and message counts to stdout while running
-f .
Reject the mail after END-OF-DATA. But the mail will be saved. Cool, isn't it?!
-B "550 5.3.0 The recipient does not like your mail. Don't try again"
This is the rejection message after END-OF-DATA.
-h spamtrap.example.com
Announce the hostname spamtrap.example.com
25
The port to listen on. Can be prepended with an IP or host if you want to bind on a special interface.
1024
The backlog count of connections that can wait in the TCP/IP stack before they get a free slot for sending mail.

Вы можете найти больше информации на странице справки smtp-sink, но они являются важными для запуска всеобъемлющей спам-ловушки. В этой конфигурации программа принимает любую почту любого размера от любого отправителя любому получателю с IPv4 и IPv6. Единственным ограничением является то, что возможно только 256 одновременных подключений с 1024 подключениями в очереди, и программа помечена как экспериментальная. Так что не используйте smtp-sink в производственной среде.

Опция -B действительна только в новых версиях Postfix. В 2.7.1 это отсутствует. В 2.8.2 это присутствует. Где-то посередине это было введено.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.