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

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

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

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

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

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

Впервые с почтовой заглушкой я познакомился в сборке веб-сервера под названием 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

05

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

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

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *