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

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

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

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

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

7
задан 13 April 2017 в 15:23

5 ответов

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

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

    luser_relay = MYLOCALUSER@localhost
    local_recipient_maps =
    
  2. Использование следующего ответа об ошибке сервера ( 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, так что не используйте это для чего-либо, кроме развитие.

0
ответ дан 13 April 2017 в 15:23

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

FakeSMTP Screenshot

0
ответ дан 13 April 2017 в 15:23

Посмотрите другой прохладный подход здесь, Как поймать электронные письма, посланные с 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

3
ответ дан 13 April 2017 в 15:23

"Поскольку это в целях разработки, и я должен протестировать с адресами электронной почты кроме моего собственного, мне нужен путь к команде 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, и т.д.), чтобы соединиться с локальным почтовым ящиком и прочитать сообщения.

5
ответ дан 13 April 2017 в 15:23

У меня точно такая же среда.Но в большинстве онлайн-документов по настройке Postfix в процессе установки рекомендуется выбрать Интернет-сайт. Я думаю, что это излишество для локального сервера разработки только на моей машине. Поэтому я делаю следующее

  1. Предполагая, что /etc/hostname содержит MyDevMachine; Я гарантирую, что /etc/hosts содержит запись 127.0.1.1 MyDevMachine

  2. Когда я устанавливаю Postfix, я бы выбрал Только локальные, затем для настройки домена я убедитесь, что установлен MyDevMachine.

  3. Потому что я хочу, чтобы все электронные письма отправлялись моему пользователю-разработчику, и если предположить, что имя этого пользователя-разработчика в Ubuntu — devuser; Поэтому я создаю файл с именем /etc/postfix/vmaps. Содержимое этого файла: /.*/devuser. Это позволит доставлять все электронные письма devuser

  4. . Затем я запускаю sudo postmap /etc/postfix/vmaps, который в конечном итоге создает vmaps.db (что-то вроде активации этого виртуальное отображение).

  5. Найдите файл /etc/postfix/main.cf и добавьте в него следующую строку кода (которая укажет Postfix использовать созданное ранее виртуальное сопоставление): virtual_alias_maps = regexp:/ etc/postfix/vmaps

  6. Перезапустите Postfix sudo service postfix restart

0
ответ дан 7 April 2020 в 20:45

Другие вопросы по тегам:

Похожие вопросы: