Оказывается, на этом Хабре есть и полезные статьи. По крайней мере, я нашёл одну такую. Вот она.
В ней рассказывается, как сделать почтовую заглушку. И без этой статьи вариантов множество. Но меня она привлекла феноменальной простотой и эффективностью.
Как отправлять и получать почту на локальном сервере
Но давайте начнём с ответа, что же такое почтовая заглушка? При разработке веб-приложений (и не только веб) важно всесторонне их протестировать. Начинается тестирование, как правило, на локальном сервере. Среди функций веб-приложения может быть и отправка писем. Например, отправка письма пользователям при регистрации, сбросе пароля, при появлении новых сообщений, при отправке отзывов, заказов и т.д. Далеко не всегда на локальном сервере настроен почтовый сервер. Можно, конечно это сделать — настроить почтовый сервер. Можно воспользоваться реальными почтовыми услугами. Но в большинстве случаев это просто не нужно, это лишнее.
Вот здесь и приходит время почтовых заглушек. Смысл их в том, что отправляемые письма больше не вызывают ошибки и не уходят в пустоту. Они сохраняются прямо на локальном сервере. Их можно посмотреть — проверить содержимое, убедиться в том, что отправка почты из программы действительно происходит.
Впервые с почтовой заглушкой я познакомился в сборке веб-сервера под названием Denwer (думаю, о ней знает каждый, если не слишком молод). Уже несколько лет, как я поддерживаю инструкцию (обновляю, исправляю, дополняю) по быстрой установке веб-сервера. У меня появилась своя сборка веб-сервера. Но я никогда не заморачивался установкой почтовой заглушки — думал, что это долго и (или) трудно.
Вариантов, разных программ, способов как это можно сделать — множество. Но этот способ действительно очень простой. Более того, на нашем компьютере/веб-сервере на появятся новых исполняемых файлов. Нам нужен только один скрипт и только одна новая строчка в конфигурационном файле.
Я адаптировал инструкцию с Хабра под свой веб-сервер, а также незначительно изменил файл скрипта.
Установка почтовой заглушки на сервер под Windows
В каталоге C:Serverbin создайте новый каталог с названием Sendmail. Теперь в этом каталоге создайте файл sendmail.php со следующим содержимым:
#!/usr/bin/env php <?php /* PHP.INI * [mail function] * ;SMTP = localhost * ;smtp_port = 25 * ;sendmail_from = me@example.com * sendmail_path = php.exe sendmail.php --dir C:mail --open */ $is_windows = stristr(PHP_OS, 'WIN'); $options = getopt("", ['open', 'prepend', 'file:', 'dir:']); $is_open = isset($options['open']); $is_prepend = isset($options['prepend']); $is_onefile = isset($options['file']); $mail_dir = isset($options['dir']) ? $options['dir'] : sys_get_temp_dir() . '/mail'; $file_name = isset($options['file']) ? $options['file'] : mkname(); $file_path = $mail_dir . '/' . $file_name; if (!is_dir($mail_dir)) { mkdir($mail_dir, 0777, TRUE); if (!is_dir($mail_dir)) { die('Mail folder [' . $mail_dir . '] not created'); } } $stream = $is_onefile ? PHP_EOL . str_repeat("-=", 10) . date('Y-m-d H:i:s') . str_repeat("-=", 10) . PHP_EOL : ''; while (false !== ($line = fgets(STDIN))) { //$stream .= ($is_windows ? str_replace("n", PHP_EOL, $line) : $line); $stream .= $line; } if ($is_prepend && file_exists($file_path)) { $file_contents = file_get_contents($file_path); $stream .= $file_contents; } file_put_contents($file_path, $stream, $is_prepend ? 0 : FILE_APPEND); if ($is_open && $is_windows) { pclose(popen("start /B notepad " . $file_path, "r")); } function mkname($i = 0) { global $mail_dir; $fn = 'mail_' . date('Y-m-d_H-i-s_') . $i . '.eml'; return file_exists($mail_dir . '/' . $fn) ? mkname( ++$i) : $fn; }
Откройте конфигурационный файл PHP, он размещён здесь C:ServerbinPHPphp.ini. И добавьте туда одну строчку:
sendmail_path = "C:ServerbinPHPphp.exe C:ServerbinSendmailsendmail.php --dir C:ServerbinSendmailemails"
Сохраните файл и перезапустите сервер. Отлично, теперь все отправленные письма будут сохраняться в каталоге C:ServerbinSendmailemails
Письма будут иметь расширение .eml и их можно открывать, например, программой Thunderbird. Либо обычным текстовым редактором.
Для проверки работы почтовой заглушки можно воспользоваться скриптом из этой статьи.