"Заглушка" sendmail для xampp

Прислано: Anton L. Safin

вт, 30/06/2009 - 13:59

Другие статьи по теме:

Несмотря на то, что мой совет не относится напрямую к Drupal'у, думается, он будет полезен тем, кто тестирует сайты у себя на локальном веб-сервере под Windows.

Немного предыстории. С самого начала работы в качестве веб-разработчика я использовал Denwer, и он мне казался идеальным решением для локального тестирования сайта. Так бы, наверное, продолжалось и по сей день, если бы я не занялся вплотную Drupal'ом. И вот тут что-то моему любимому Denwer'у не понравилось - он мог несколько минут загружать страницу, при этом индикатор загрузки процессора был близок к 90%. В поисках альтернативного решения я наткнулся на пакет xampp lite, поставил его, и буквально через неделю удалил папку Denwer'а с машины.

Однако и в этой бочке меда нашлась пара ложек чего-то не очень съедобного.

Во-первых, xampp, как уважающий себя веб-сервер, не пытается самостоятельно создавать виртуальные хосты. Впрочем, пару раз в месяц добавить две строчки в httpd-vhosts.conf и hosts не составляет труда. А вот второй "фишки" Denwer'а очень не хватало. Это - отладочная заглушка sendmail, которая позволяет вместо отправки почты записывать ее в файл.

Радуйтесь все, кто пришел сюда за конкретным рецептом - вводная часть завершена. Переходим к практике. Итак, чтобы реализовать подобную функцию на xampp (впрочем, как и на любом другом веб-сервере), делаем следующее:

  1. В папке sendmail в домашней директории xampp создаем файл sendmail.php:
    <?php

    //папка в которую будем складывать почту
    define('DIR','c:/xampplite/tmp/sendmail/');

    //получаем из потока тело письма
    $stream '';
    $fp fopen('php://stdin','r');
    while(
    $t=fread($fp,2048))
        {
        if( 
    $t===chr(0) )
            break;
        
    $stream .= $t;
        }
    fclose($fp);

    //Сохраняем в файл
    $fp fopen(mkname(),'w');
    fwrite($fp,iconv("UTF-8","CP1251",$stream));
    fclose($fp);

    //Функция присвоения имени файлу
    function mkname($i=0)
        {
        
    $fn DIR.date('Y-m-d_H-i-s_').$i.'.eml';
        if ( 
    file_exists($fn) )
            return 
    mkname(++$i);
            else return 
    $fn;
        }

    ?>
  2. В файле \php\php.ini ищем строчку
    sendmail_path = "C:\xampplite\sendmail\sendmail_.exe -t"

    и заменяем ее на
    sendmail_path = C:\xampplite\php\php.exe c:\xampplite\sendmail\sendmail.php

    Естественно, пути нужно подправить в соответствии с той директорией, куда вы установили xampp.
  3. Перезапускаем сервис apache, и проверяем работу нашей заглушки - если вы все сделали правильно, все отправленные письма будут ждать вас в папке /tmp/sendmail/

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано kosilko в вт, 30/06/2009 - 17:01.

спасибо огромное, воспользовался на самодельном денвере


Опубликовано Myron в ср, 01/07/2009 - 02:40.

"Anton L. Safin" написал(а):

В папке sendmail в домашней директории xampp создаем...

Архинужная вещь. К сожалению использую Wamp, но не нашел папки sendmail.

Также не нашел строки

Цитата:

sendmail_path = "C:\xampplite\sendmail\sendmail_.exe -t"

в файле php.ini, который у меня находится в c:\wamp\bin\php\php5.2.9-2\php.ini
Нашел только:
sendmail_from = admin@<адрес сайта>
Поменял - не работает отсылка почты.
От Денвера отказался на 3-й день, перешел на Wamp


Опубликовано Anton L. Safin в ср, 01/07/2009 - 10:51.

"Myron" написал(а):

К сожалению использую Wamp, но не нашел папки sendmail

Не проблема - можно ее создать или разместить php файл в любой другой папке. Просто пути нужно будет прописать правильные.

"Myron" написал(а):

в файле php.ini, который у меня находится в c:\wamp\bin\php\php5.2.9-2\php.ini
Нашел только:
sendmail_from = admin@<адрес сайта>
Поменял - не работает отсылка почты.

Вставьте строчку с sendmail_path в любом месте файла php.ini и перезапустите apache. Должно заработать.

Проверить можно, создав php файл со следующим содержимым:

<?php
phpinfo
();
?>

Откройте его в браузере и найдите строчку sendmail_path. Да, в xampp такой файл уже есть, и доступен по ссылке http://localhost/xampp/phpinfo.php.

И еще - в скрипте используется функция iconv для перекодировки текста из UTF-8 в CP-1251, поэтому, если после указанных действий письмо все равно не сохраняется, возможно, дело в отсутствии библиотеки iconv. В таком случае просто исправьте 19-ю строку в файле на следующую:

<?php
fwrite
($fp,$stream);
?>


Опубликовано Myron в ср, 08/07/2009 - 03:43.

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

"Anton L. Safin" написал(а):

В таком случае просто исправьте 19-ю строку в файле на следующую:

В каком файле это надо сделать?


Опубликовано PVasili в ср, 08/07/2009 - 06:40.

А не пробовали denwer немного поднастроить? Ни разу не замечал проблем особых... Тем более, скоро 4 версия появится


Опубликовано FreeDaemon в ср, 08/07/2009 - 09:42.

"PVasili" написал(а):

Тем более, скоро 4 версия появится

Уже пол года, как скоро


Опубликовано Anton L. Safin в ср, 08/07/2009 - 13:34.

"Myron" написал(а):

В каком файле это надо сделать?

В созданном sendmail.php


Опубликовано Sergenius в пн, 19/04/2010 - 15:52.

Спасибо автору применил на wampserver 2 глушит и складывает в папку.

Только почему-то письма не содержат текста лишь кому от кого и тему В чём может быть проблема?


Новое на сайте

Ссылки партнёров