Только локальный sendmail, который доставляет всю почту в каталог
У меня есть виртуальная машина Ubuntu Server (12.04.1), которую я использую для разработки php-сайтов и сайтов электронной коммерции (например, Magento и т. Д.).
Поскольку это для целей разработки, и мне нужно протестировать с адресами электронной почты, отличными от моих, мне нужен способ, чтобы команда sendmail принимала почту, но не доставляла ее, а архив где-то, где я могу посмотреть Это.
Как проще всего установить почтовый сервер таким образом, чтобы команда sendmail направляла ВСЕ письма в локальный каталог? т.е. я не хочу, чтобы какая-либо почта доставлялась в интернет.
Я попытался выполнить шаги, описанные в этом вопросе ( SMTP-сервер для доставки ВСЕЙ почты пользователю @ localhost), но, похоже, он не работает - в моем (локальном) почтовом ящике появляется сообщение об ошибке, сообщающее, что оно не может доставить мое тестовое сообщение (например, somebody@gmail.com)
4 ответа
Чтобы ответить на мой собственный вопрос, используя postfix, это возможно. Вы должны сделать две вещи:
Добавьте параметры конфигурации, описанные на SMTP-сервере, для доставки ВСЕЙ почты пользователю @ localhost, добавьте следующее в ваш файл /etc/postfix/main.cf:
luser_relay = MYLOCALUSER@localhost local_recipient_maps =
Используя следующий ответ на serverfault ( https://serverfault.com/questions/133190/host-wildcard-subdomains-using-postfix), я добавил следующее (обратите внимание, что вам нужен установленный пакет postfix-pcre):
В /etc/postfix/main.cf:
mydestination = pcre:/etc/postfix/mydestinations
В /etc/postfix/mydestination
/.*/ ACCEPT
Это доставит ВСЮ почту, которую обрабатывает postfix, настроенному локальному пользователю, определенному в #1, так что не используйте это ни для чего, кроме разработки.
"Поскольку это для целей разработки, и мне нужно протестировать с адресами электронной почты, отличными от моих, мне нужен способ, чтобы команда 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 и т. Д.), Чтобы подключиться к локальному почтовому ящику и прочитать сообщения.
Смотрите еще один крутой подход здесь Как поймать электронные письма, отправленные с помощью 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
папка.
PS Также вы можете добавить shell_exec("chmod 777 /var/log/mail/ -R");
в /usr/local/bin/sendmail
У меня точно такая же среда. Но большая часть онлайн-документации по настройке Postfix советует вам выбрать Интернет-сайт в процессе установки. Я думаю, что это перебор только для локального сервера разработки на моей машине. Итак, я делаю следующее
Предполагая
/etc/hostname
содержитMyDevMachine
; Я гарантирую, что/etc/hosts
содержит запись127.0.1.1 MyDevMachine
Когда я устанавливаю Postfix, я бы выбрал только локальный, а затем для настройки домена я убедился
MyDevMachine
установлен.Потому что я хочу, чтобы все электронные письма отправлялись моему пользователю-разработчику, и предполагая, что имя этого пользователя-разработчика в Ubuntu
devuser
; Поэтому я создаю файл с именем/etc/postfix/vmaps
. Содержимое этого файла/.*/ devuser
. Это позволит доставлять все электронные письма на адресdevuser
Я тогда бегу
sudo postmap /etc/postfix/vmaps
что в конечном итоге создаетvmaps.db
(своего рода активация этого виртуального сопоставления).Найдите файл
/etc/postfix/main.cf
и добавьте его со следующей строкой кода (которая укажет Postfix использовать виртуальное сопоставление, созданное ранее):virtual_alias_maps = regexp:/etc/postfix/vmaps
Перезапустить Postfix
sudo service postfix restart
Другой подход заключается в запуске сервера FakeSMTP, кросс-платформенного обработчика SMTP; кто целиком является получать электронные письма, хранить и отображать их с вашим настроенным почтовым клиентом.