У меня есть виртуальная машина Ubuntu Server (12.04.1), которую я использую для разработки php-сайтов и сайтов электронной коммерции (например, Magento и т. Д.).
Поскольку это для целей разработки, и мне нужно протестировать с адресами электронной почты, отличными от моих, мне нужен способ для команды sendmail принять почту, но на самом деле не доставить ее, а архив где-то, где я могу посмотреть на это.
Как проще всего установить почтовый сервер таким образом, чтобы команда sendmail направляла ВСЕ письма в локальный каталог? я не хочу, чтобы какая-либо почта доставлялась в интернет.
Я попытался выполнить шаги, описанные в этом вопросе ( SMTP-сервер для доставки ВСЕЙ почты пользователю @ localhost ), но, похоже, он не работает - в моем (локальном) почтовом ящике появляется сообщение об ошибке сообщая мне, что он не может доставить мое тестовое сообщение (например, somebody@gmail.com)
Чтобы ответить на мой вопрос, используя постфикс, это возможно. Вы должны сделать две вещи:
Добавить параметры конфигурации, описанные в SMTP-сервере для доставки ВСЕЙ почты пользователю @ localhost , добавить следующее в ваш / etc / Файл postfix / main.cf:
luser_relay = MYLOCALUSER@localhost
local_recipient_maps =
Использование следующего ответа об ошибке сервера ( https://serverfault.com/questions/133190/host-wildcard-subdomains- используя-postfix ), я добавил следующее (обратите внимание, что вам нужен установленный пакет postfix-pcre):
В /etc/postfix/main.cf:
mydestination = pcre:/etc/postfix/mydestinations
В / etc / postfix / mydestitions
/.*/ ACCEPT
Это доставит ВСЕ сообщения, которые обрабатывает postfix, настроенному локальному пользователю, определенному в # 1, так что не используйте это для чего-либо, кроме развитие.
Другой подход заключается в запуске сервера «FakeSMTP» , кроссплатформенного обработчика SMTP; кто целиком является получать электронные письма, хранить и отображать их с вашим настроенным почтовым клиентом.
Посмотрите другой прохладный подход здесь, Как поймать электронные письма, посланные с 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
"Поскольку это в целях разработки, и я должен протестировать с адресами электронной почты кроме моего собственного, мне нужен путь к команде sendmail, чтобы принять почту, но не на самом деле поставить ее, а скорее архив где-нибудь, где я могу посмотреть на нее".
Необходимо будет все еще поставить его. Просто необходимо переопределить, "куда" это поставляется.
"Что самый легкий путь состоит в том, чтобы установить почтовый сервер, таким образом, что команда sendmail направляет ВСЮ почту к локальному каталогу? т.е. Я НЕ хочу, чтобы любая почта была поставлена Интернету".
Это может на самом деле быть сделано с помощью только постфиксный пакет установки по умолчанию (никакая потребность в постфиксе-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 courrier (такого как голубятня), можно использовать Почтовый Агент пользователя (Thunderbird, Outlook, и т.д.), чтобы соединиться с локальным почтовым ящиком и прочитать сообщения.
У меня точно такая же среда.Но в большинстве онлайн-документов по настройке 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