Як налаштувати постфікс для зберігання електронної пошти у файлі, а не ретрансляції?


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, так постфікси доставить його на місці.

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

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

mydestination = pcre:/etc/postfix/mydestinations

і /etc/postfix/mydestinationsповинен містити

/.*/    ACCEPT

Я зараз не можу перевірити, але це має працювати.


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

Дякую за оновлення, я опублікував власне рішення проблеми, оскільки воно здається "чистішим", але ваше схоже, що воно також має працювати.
GomoX

Щоб працювати за призначенням, це також потребує налаштування local_recipient_maps = . Це описано у посиланні, яке ви надали, але я думаю, що його слід також згадати у відповіді.
їїман

2

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

defer_transports = smtp

потім можна побачити чергу postqueue -pі переглянути вміст за допомогоюpostcat


0

Залежно від вашого розповсюдження, ви можете подивитись на "нульмайстер". Це ретрансляційний MTA, який ретранслюється на інший SMTP у вашій мережі або на віддаленому пристрої. Це може бути недійсним SMTP, і в цьому випадку він, ймовірно, лише поставить його в чергу в папці на машині.

Для debian і ubuntu це доступно як заміна MTA для вашої системи.


0

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

Вам навіть не потрібно налаштовувати Postfix, щоб він виступав в якості нульового повідомлення. 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.

Додаткову інформацію можна знайти на сторінці man у smtp-sink, але це важливі для запуску загальної спам-папки. У цій конфігурації програма приймає будь-яку пошту будь-якого розміру від будь-якого відправника до будь-якого одержувача з IPv4 та IPv6. Єдині обмеження полягають у тому, що можливе лише 256 одночасних з'єднань з 1024 з'єднаннями в черзі, а програма позначена експериментально. Тому не використовуйте smtp-раковину у виробничих умовах.

Параметр -B дійсний лише в нових версіях Postfix. У 2.7.1 він відсутній. У 2.8.2 він присутній. Десь між ними було введено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.