Как настроить почтовый сервер для WordPress на локальном хосте

WordPress отправляет служебные письма через функцию wp_mail(), которая обычно опирается на PHP-механизм mail(). На локальном хосте этот механизм часто не настроен: в среде WordPress отсутствует системный MTA, письмо не появляется в Outlook, а причина ошибки остается неясной. Локальный SMTP-сервер перехватывает отправку, сохраняет содержимое сообщения и позволяет проверить его без выхода в интернет. Подробнее о ネットワークで有線lanと無線lanを端末で同時使用して速度を上げる手順 負荷分散.

Важно различать тестовый и рабочий режимы. Mailpit, MailHog и smtp4dev предназначены для разработки: они принимают письма и показывают их в локальном интерфейсе, не доставляя сообщения получателям. Postfix или Exim способны работать как полноценные почтовые агенты и передавать почту через внешний SMTP-релей. Для тестовой копии WordPress безопаснее использовать перехватывающий сервер, исключающий случайную рассылку.

Практическая схема достаточно проста: запустить SMTP-службу на 127.0.0.1, указать ее адрес в SMTP-плагине WordPress, отправить тестовое письмо и изучить журнал. Такой контур работает в Windows, Linux и macOS, если сайт и почтовый сервер запущены на одном компьютере либо связаны через внутреннюю сеть Docker.

Выберите подходящий SMTP-сервер

Для локальной проверки удобен Mailpit: программа принимает SMTP по порту 1025, предоставляет веб-интерфейс по порту 8025 и не требует доменного имени или почтового провайдера. MailHog работает по похожему принципу, а smtp4dev подойдет разработчикам, которым комфортнее интерфейс на базе .NET. Эти инструменты сохраняют письма только на тестовом компьютере.

Службу лучше привязывать к 127.0.0.1, а не к 0.0.0.0. Первый адрес доступен только самому компьютеру и предотвращает посторонний доступ к почтовому интерфейсу. Адрес 0.0.0.0 открывает порты всем сетевым интерфейсам, поэтому его следует использовать лишь в закрытой сети с дополнительной аутентификацией и правилами брандмауэра.

Если компьютер подключен одновременно к проводной и беспроводной сети, полезно понимать, как система выбирает маршрут. Материал о работе LAN и Wi-Fi показывает, почему локальные адреса и задержки иногда ведут себя неожиданно. Для Mailpit это не меняет схему подключения, зато помогает исключить сетевой конфликт при проверке портов.

Установите и запустите Mailpit

В Windows скачайте исполняемый файл Mailpit, распакуйте его в отдельную папку и проверьте, что система разрешает запуск неизвестных приложений. Если для подготовки среды требуется изменить параметры системы, краткий обзор по настройке Windows поможет проверить пути, брандмауэр и фоновые службы. Python для Mailpit не нужен, поскольку распространяется как самостоятельная программа.

В каталоге с исполняемым файлом выполните в PowerShell:

.\mailpit.exe --smtp 127.0.0.1:1025 --listen 127.0.0.1:8025

После запуска откройте http://127.0.0.1:8025 в браузере. Интерфейс покажет пустую папку с входящими сообщениями, а в PowerShell останется активным журнал соединений. Пока работает это окно, SMTP-порт доступен для WordPress. Проверить его можно командой Test-NetConnection 127.0.0.1 -Port 1025.

В Linux Mailpit устанавливают как отдельный исполняемый файл либо запускают через Docker. Удобный контейнерный вариант выглядит так:

docker run --name mailpit -p 127.0.0.1:1025:1025 -p 127.0.0.1:8025:8025 axllent/mailpit

Обе публикации портов намеренно ограничены петлевым интерфейсом. Состояние контейнера можно посмотреть командой docker logs mailpit, а после перезапуска имя mailpit сохранит прежние сообщения. Если почтовый сервер работает в контейнере, а сайт установлен обычным PHP-приложением, указанный адрес 127.0.0.1 по-прежнему подходит.

Подключите WordPress к локальному SMTP

На локальной копии установите SMTP-плагин, например WP Mail SMTP или FluentSMTP. Он заставляет wp_mail() обращаться напрямую к настроенному SMTP-серверу, минуя ненадежный PHP-вызов mail(). Перед настройкой убедитесь, что сайт запущен на том же компьютере. Если WordPress тоже находится в Docker, вместо 127.0.0.1 укажите имя контейнера Mailpit в общей сети либо host.docker.internal с поддержкой этого адреса в Docker.

В разделе SMTP-параметров плагина задайте адрес сервера 127.0.0.1 и порт 1025. Уровень шифрования оставьте «Нет», автоматическое включение TLS отключите, а аутентификацию выберите «Нет», поскольку локальная тестовая служба не запрашивает имя пользователя и пароль. В качестве адреса отправителя можно указать wordpress@example.test, а отображаемое имя — название сайта.

Эквивалентные параметры WP Mail SMTP можно зафиксировать в wp-config.php до строки запуска WordPress:

define( 'WPMS_SMTP_HOST', '127.0.0.1' );
define( 'WPMS_SMTP_PORT', 1025 );
define( 'WPMS_SMTP_SECURE', '' );
define( 'WPMS_SMTP_AUTH', false );
define( 'WPMS_SMTP_DEBUG', 1 );

Эти константы относятся именно к WP Mail SMTP, поэтому перед их использованием проверьте название плагина и его документацию. Значение localhost иногда разрешается в IPv6-адрес ::1, тогда как Mailpit слушает только IPv4; в таком случае явный 127.0.0.1 снимает ошибку соединения. После сохранения настроек перезапустите PHP или контейнер с WordPress и отправьте тестовое письмо.

Проверьте доставку и устраните ошибки

В Mailpit откройте папку с входящими сообщениями и запустите проверку из SMTP-плагина. Затем отправьте письмо через форму восстановления пароля, регистрацию пользователя или отправку сообщения из контактной формы. В интерфейсе нужно проверить получателя, тему, текст, заголовки отправителя и наличие вложений. Полученное письмо считается захваченным, хотя настоящий адресат его не увидит.

Ошибка connection refused обычно означает, что Mailpit не запущен или слушает другой адрес. Ошибка тайм-аута часто вызвана блокировкой порта брандмауэром или неверным адресом внутри контейнера. Если сервер требует TLS, а в настройках выбран режим «Нет», соединение завершится ошибкой согласования шифрования. Для локального HTTP-сайта TLS обычно не нужен. Если тестовый стенд доступен другим устройствам через защищенный адрес, сначала завершите настройку HTTPS для WordPress, а SMTP проверяйте отдельным тестом.

Журнал плагина и консоль Mailpit помогают сопоставить ошибку PHP с ответом SMTP-сервера. После проверки удалите сохраненные письма, особенно сообщения с паролями, токенами восстановления и тестовыми персональными данными. Не публикуйте веб-интерфейс Mailpit в интернет без аутентификации: в нем видны содержимое сообщений и служебные заголовки. Для локальной разработки достаточно привязки к петлевому адресу и закрытого доступа к порту 8025.

Переведите локальный контур в рабочий режим

Перехватывающий SMTP-сервер не заменяет инфраструктуру для отправки писем клиентам. Если сайт должен работать в интернете, настройте Postfix или Exim как локальный MTA, подключите доверенный SMTP-релей и привяжите исходящие адреса к домену. Для отправки необходимы корректные DNS-записи SPF и DKIM, политика DMARC и возможность принимать обратные DNS-ответы почтовой инфраструктуры. Прием входящих писем дополнительно зависит от MX-записей домена.

Если WordPress и Postfix находятся на одном сервере, интерфейс MTA можно ограничить параметром inet_interfaces = loopback-only, а внешний транспорт задать через relayhost. Открытый релей, доступный посторонним, способен превратить сервер в инструмент массовой рассылки. Отправка через случайный домашний IP без настроенного релея обычно блокируется получателями, поэтому рабочий адрес SMTP следует получать у специализированного почтового провайдера.

Сохраните рядом с проектом версии WordPress, SMTP-плагина и Mailpit, выбранные порты, параметры подключения и результаты проверок. Учетные данные реального почтового сервера должны храниться в защищенном файле конфигурации или переменных окружения, а не в общедоступном репозитории. Временно включайте подробное журналирование, затем отключайте его после устранения ошибок и удаляйте тестовые сообщения.

Запустите контур прямо сейчас: откройте http://127.0.0.1:8025, выполните тест в SMTP-плагине и отправьте письмо восстановления пароля. Убедитесь, что получатель, тема, текст и служебные заголовки заполнены правильно, а в журнале отсутствуют ошибки соединения, после чего сохраните рабочие параметры как основу локальной конфигурации WordPress.

Иконка пользователя в серых тонах

Настройка Windows

Доступ к скрытым параметрам конфигурации, отключение телеметрии, работа с диспетчером задач и тонкая настройка меню «Пуск» в стиле Windows XP для Windows 7.

Иконка браузера в серо-синих тонах

Веб-браузеры

Скрытые страницы конфигурации в Firefox, Chrome и Opera, быстрый текстовый редактор прямо в браузере, эффект Lightbox JS для изображений и настройка внешнего вида Firefox.

Иконка папки в нейтральных серых тонах

WordPress и блоги

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

Изометрический 3D-рендер: светлый веб-сайт с серо-голубым заголовком, парящий над чистой белой поверхностью Изометрический 3D-рендер: тёмно-серая иконка социального букмаркинга на светлом фоне

Обратная связь

Есть вопрос или предложение по темам блога? Напишите — автор на связи.