Локальный только sendmail, который доставляет всю почту в каталог

7

У меня есть разработка Ubuntu Server (12.04.1) VM, которую я использую для разработки php-сайтов и сайтов электронной коммерции (таких как Magento и т. д.).

Поскольку это предназначено для разработки, и мне нужно протестировать с адресами электронной почты, отличными от моих собственных, мне нужно, чтобы команда sendmail принимала почту, но фактически не доставляла ее, а архив где-то где я может посмотреть на него.

Каков самый простой способ установки почтового сервера, чтобы команда sendmail маршрутизировала ВСЕ почту в локальный каталог? т. е. я НЕ хочу, чтобы какая-либо почта была доставлена ​​в Интернет.

Я пробовал шаги, описанные в этом вопросе ( сервер SMTP для доставки ВСЕ почту для пользователя @ localhost ), но он не работает - появляется сообщение об ошибке в моем (местном) почтовом ящике, в котором сообщается, что он не может доставить мое тестовое сообщение (например, someone@gmail.com)     

задан Gareth 26.10.2012 в 14:54
источник

4 ответа

6

Чтобы ответить на мой собственный вопрос, использование постфикса возможно. Вы должны сделать две вещи:

  1. Добавьте параметры конфигурации, описанные в сервере SMTP, чтобы доставить ВСЕ почту user @ localhost , добавьте в файл /etc/postfix/main.cf следующее:

    luser_relay = MYLOCALUSER@localhost
    local_recipient_maps =
    
  2. Используя следующий ответ на serverfault ( Ссылка ), я добавил следующее ( обратите внимание, что вам нужен пакет postfix-pcre):

    В /etc/postfix/main.cf:

     mydestination = pcre:/etc/postfix/mydestinations
    

    В / etc / postfix / mydestinations

    /.*/         ACCEPT
    

Это приведет к доставке всей почты, которую постфикс обрабатывает настроенному локальному пользователю, определенному в # 1, поэтому не используйте это ни для чего другого, кроме разработки.

    
ответ дан Gareth 26.10.2012 в 15:12
источник
5
  

«Поскольку это предназначено для целей разработки, и мне нужно протестировать с адресами электронной почты, отличными от моих собственных, мне нужно, чтобы команда sendmail принимала почту, но на самом деле не доставляла ее, но архив где-то там Я могу посмотреть на это ».

Вам все равно придется доставить его. Вам просто нужно переопределить «где» он доставлен.

  

«Самый простой способ установить почтовый сервер, чтобы команда sendmail маршрутизировала ВСЕ почту в локальный каталог, т. е. я НЕ хочу, чтобы какая-либо почта была доставлена ​​в Интернет».

Это можно сделать, используя только установочный пакет postfix по умолчанию (нет необходимости в postfix-pcre).

1.) Следуя учебнику здесь , отредактируйте 2 строки в /etc/postfix/master.cf , чтобы предотвратить доставку почты извне (она застревает в локальной почтовой очереди):

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local

2.) Создайте файл в /etc/postfix , называемом virtual . Поместите следующую строку внутри этого файла, заменив <USERNAME> на локальное имя учетной записи пользователя, которое вы хотите отправить всей почте:

/.*/    <USERNAME>

3.) Выполните следующую команду, чтобы создать правильный файл базы данных для постфикса для поиска этой новой «виртуальной карты псевдонимов». Новый файл с автогенерируемой базой данных будет называться «virtual.db»

sudo postmap /etc/postfix/virtual

4.) Добавьте следующую строку в /etc/postfix/main.cf

virtual_alias_maps = regexp:/etc/postfix/virtual

5.) Перезапустить постфикс:

sudo service postfix restart

Теперь вся почта, независимо от отправителя, получателя или программы, указывающей на этот SMTP-сервер, будет доставлена ​​локально указанному пользователю. Существует множество опций для чтения / получения этих сообщений. Если вы устанавливаете курьер IMAP или POP3 (например, dovecot ), вы можете использовать агента почтовых пользователей (Thunderbird, Outlook и т. Д.). ) для подключения к вашему локальному почтовому ящику и чтения сообщений.

    
ответ дан ZParrish 17.09.2014 в 14:25
источник
2

Смотрите еще один классный подход здесь Как поймать электронные письма отправленный с PHP на локальный сервер .

$ sudo mkdir /var/log/mail
$ sudo nano /usr/local/bin/sendmail

Добавьте следующий скрипт PHP в этот новый файл sendmail:

#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
$filename = tempnam('/var/log/mail', $matches[1] . '.');
file_put_contents($filename, $input);

Добавьте sendmail_path = /usr/local/bin/sendmail в /etc/php5/apache2/php.ini .

$ sudo chmod 755 /usr/local/bin/sendmail
$ sudo chmod 777 /var/log/mail
$ sudo /etc/init.d/apache2 restart

Теперь все ваши письма находятся в папке /var/log/mail .

P.S. Также вы можете добавить shell_exec("chmod 777 /var/log/mail/ -R"); в /usr/local/bin/sendmail

    
ответ дан milkovsky 21.01.2014 в 18:47
источник
0

Другой подход - запустить «FakeSMTP» сервер, кросс-платформенный SMTP-обработчик; цель которого - получать электронные письма, хранить и отображать их с помощью настроенного почтового клиента.

    

ответ дан tutuDajuju 12.07.2016 в 08:15
источник

Ознакомьтесь с другими вопросами по меткам