Pull to refresh

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

Reading time3 min
Views10K
Здравствуйте!

Недавно купил новый ноутбук (старый стал совсем старый). Установил на него 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
Comments23

Articles

Change theme settings