Почта на локальном сервере — установка почтовой заглушки

Оказывается, на этом Хабре есть и полезные статьи. По крайней мере, я нашёл одну такую. Вот она.

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

Как отправлять и получать почту на локальном сервере

Но давайте начнём с ответа, что же такое почтовая заглушка? При разработке веб-приложений (и не только веб) важно всесторонне их протестировать. Начинается тестирование, как правило, на локальном сервере. Среди функций веб-приложения может быть и отправка писем. Например, отправка письма пользователям при регистрации, сбросе пароля, при появлении новых сообщений, при отправке отзывов, заказов и т.д. Далеко не всегда на локальном сервере настроен почтовый сервер. Можно, конечно это сделать — настроить почтовый сервер. Можно воспользоваться реальными почтовыми услугами. Но в большинстве случаев это просто не нужно, это лишнее.

Вот здесь и приходит время почтовых заглушек. Смысл их в том, что отправляемые письма больше не вызывают ошибки и не уходят в пустоту. Они сохраняются прямо на локальном сервере. Их можно посмотреть — проверить содержимое, убедиться в том, что отправка почты из программы действительно происходит.

Впервые с почтовой заглушкой я познакомился в сборке веб-сервера под названием Denwer (думаю, о ней знает каждый, если не слишком молод). Уже несколько лет, как я поддерживаю инструкцию (обновляю, исправляю, дополняю) по быстрой установке веб-сервера. У меня появилась своя сборка веб-сервера. Но я никогда не заморачивался установкой почтовой заглушки — думал, что это долго и (или) трудно.

Вариантов, разных программ, способов как это можно сделать — множество. Но этот способ действительно очень простой. Более того, на нашем компьютере/веб-сервере на появятся новых исполняемых файлов. Нам нужен только один скрипт и только одна новая строчка в конфигурационном файле.

Я адаптировал инструкцию с Хабра под свой веб-сервер, а также незначительно изменил файл скрипта.

Установка почтовой заглушки на сервер под Windows

В каталоге C:Serverbin создайте новый каталог с названием Sendmail. Теперь в этом каталоге создайте файл sendmail.php со следующим содержимым:

#!/usr/bin/env php

<?php
/*  PHP.INI
 *  [mail function]
 *  ;SMTP = localhost
 *  ;smtp_port = 25
 *  ;sendmail_from = [email protected]
 *  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

05

Письма будут иметь расширение .eml и их можно открывать, например, программой Thunderbird. Либо обычным текстовым редактором.

Для проверки работы почтовой заглушки можно воспользоваться скриптом из этой статьи.

Оставьте комментарий