Почта на локальном сервере — установка почтовой заглушки
Life-HackКак отправлять и получать почту на локальном сервере
Но давайте начнём с ответа, что же такое почтовая заглушка? При разработке веб-приложений (и не только веб) важно всесторонне их протестировать. Начинается тестирование, как правило, на локальном сервере. Среди функций веб-приложения может быть и отправка писем. Например, отправка письма пользователям при регистрации, сбросе пароля, при появлении новых сообщений, при отправке отзывов, заказов и т.д. Далеко не всегда на локальном сервере настроен почтовый сервер. Можно, конечно это сделать — настроить почтовый сервер. Можно воспользоваться реальными почтовыми услугами. Но в большинстве случаев это просто не нужно, это лишнее.
Вот здесь и приходит время почтовых заглушек. Смысл их в том, что отправляемые письма больше не вызывают ошибки и не уходят в пустоту. Они сохраняются прямо на локальном сервере. Их можно посмотреть — проверить содержимое, убедиться в том, что отправка почты из программы действительно происходит.
Впервые с почтовой заглушкой я познакомился в сборке веб-сервера под названием 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. Либо обычным текстовым редактором. Источник