"Заглушка" 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 (впрочем, как и на любом другом веб-сервере), делаем следующее:
- В папке 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;
}
?> - В файле \php\php.ini ищем строчку
sendmail_path = "C:\xampplite\sendmail\sendmail_.exe -t"
и заменяем ее на
sendmail_path = C:\xampplite\php\php.exe c:\xampplite\sendmail\sendmail.php
Естественно, пути нужно подправить в соответствии с той директорией, куда вы установили xampp. - Перезапускаем сервис apache, и проверяем работу нашей заглушки - если вы все сделали правильно, все отправленные письма будут ждать вас в папке /tmp/sendmail/
- Anton L. Safin's blog
- Для комментирования войдите или зарегистрируйтесь
спасибо огромное, воспользовался на самодельном денвере
- Для комментирования войдите или зарегистрируйтесь
В папке 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
- Для комментирования войдите или зарегистрируйтесь
К сожалению использую Wamp, но не нашел папки sendmail
Не проблема - можно ее создать или разместить php файл в любой другой папке. Просто пути нужно будет прописать правильные.
в файле 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);
?>- Для комментирования войдите или зарегистрируйтесь
Спасибо, дошел до последнего замечания, т.к. предыдущие не работают.
И здесь возник вопрос.
Вот здесь сказано:
В таком случае просто исправьте 19-ю строку в файле на следующую:
В каком файле это надо сделать?
- Для комментирования войдите или зарегистрируйтесь
А не пробовали denwer немного поднастроить? Ни разу не замечал проблем особых... Тем более, скоро 4 версия появится
- Для комментирования войдите или зарегистрируйтесь
Тем более, скоро 4 версия появится
Уже пол года, как скоро
- Для комментирования войдите или зарегистрируйтесь
В каком файле это надо сделать?
В созданном sendmail.php
- Для комментирования войдите или зарегистрируйтесь
Спасибо автору применил на wampserver 2 глушит и складывает в папку.
Только почему-то письма не содержат текста лишь кому от кого и тему В чём может быть проблема?
- Для комментирования войдите или зарегистрируйтесь



Комментарии