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

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

Black Door

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

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

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

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







Report Page