Pull to refresh

Настройка почты для отладки mail-функций разрабатываемых приложений на Ubuntu

Reading time 3 min
Views 10K
Здравствуйте!

Недавно купил новый ноутбук (старый стал совсем старый). Установил на него Ubuntu (почему удалил другую ОС, сначала описал, но потом стёр, чтобы не было флейма и холивара).

Для того, чтобы работала отправка почты из PHP и всего остального, нужен MTA. Я пользуюсь Synaptic для установки большинства программ, и в нём Postfix отмечен логотипом Ubuntu (что означает, что он является MTA по умолчанию), поэтому, без долгих раздумий, поставил Postfix. При установке с помощью синаптика вылезает окошко конфигурирования Postfix, я выбрал выриант localhost only.

Когда дошёл до момента тестирования одной функции в PHP приложении, связанной с отправкой почты, случился курьёз. Тестирую с копией живой базы, и, после отправки письма, оно, естественно, было отправлено MTA по назначению, от чего уже отвык под Windows, где использовал Courier Mail Server (кстати, очень маленький и удобный). Конечно, сразу извинился перед человеком, которому ушло письмо.

В связи с чем возник вопрос: как настроить почту, чтобы она не уходила за пределы localhost, либо уходила на определённый локальный ящик?

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

Настраивается это так:
В файл /etc/postfix/main.cf добавляется строчка
header_checks = regexp:/etc/postfix/header_checks
создаётся файл /etc/postfix/header_checks, в него добавляется такая строчка:
/^Received:/ HOLD
после чего выполняется команда
postmap /etc/postfix/header_checks
а postfix «освежается» командой
postfix reload
Как только изменения приняты постфиксом, вся входящая почта будет попадать в очередь hold, и никуда отправляться не будет.

Почта в этой очереди может быть просмотрена несколькими путями:
  1. Любой смотрелкой текста, например, встроенной в mc. Все сообщения очереди находятся в каталоге /var/spool/postfix/hold, в отдельных файлах, поэтому можно просмотреть любое сообщение.
  2. С помощью программы pfqueue (я поставил синаптиком).
pfqueue следует запускать так:
pfqueue -q 4
параметр q задаёт номер очереди, у очереди hold номер 4.

+ заголовки сохраняются без изменений
- pfqueue не показывает тело сообщения (по крайней мере, у меня, сообщение в 1251)

Второй метод — пересылать всю почту на локальный ящик. Почту с локального ящика удобно просматривать, настроив почтовый клиент (который обычно всегда работает) на POP3 localhost.

Делается это так:
с помощью синаптика (или apt-get, кому как удобно) устанавливается POP3 демон dovecot (чтобы работал POP3)
в файл /etc/postfix/header_checks добавляется строчка
/^Received:/ REDIRECT your_login@localhost
(если у вас уже есть строчка с HOLD, нужно её закомментировать, поставив в начале строчки #). Выполняются команды
postmap /etc/postfix/header_checks
postfix reload

Почтовый клиент настраивается на POP3 localhost с логином и паролем учётной записи, которая указана в REDIRECT.

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

+ удобно смотреть почту
- затираются заголовки To:, они заменяются на адрес в REDIRECT.

Итак, у каждого варианта есть свои преимущества и недостатки (как и у всего в этой жизни). Хорошо, что можно поменять вариант обработки в любой момент. Если есть какой-то более удобный способ перехвата всей почты в Ubuntu, буду рад узнать о нём в комментариях.
Tags:
Hubs:
+17
Comments 23
Comments Comments 23

Articles