Несмотря на то, что мой совет не относится напрямую к 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/
Комментарии
спасибо огромное, воспользовался на самодельном денвере
Архинужная вещь. К сожалению использую Wamp, но не нашел папки sendmail.
Также не нашел строки
в файле php.ini, который у меня находится в c:\wamp\bin\php\php5.2.9-2\php.ini
Нашел только:
sendmail_from = admin@<адрес сайта>
Поменял - не работает отсылка почты.
От Денвера отказался на 3-й день, перешел на Wamp
Не проблема - можно ее создать или разместить php файл в любой другой папке. Просто пути нужно будет прописать правильные.
Вставьте строчку с 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);
?>
Спасибо, дошел до последнего замечания, т.к. предыдущие не работают.
И здесь возник вопрос.
Вот здесь сказано:
В каком файле это надо сделать?
А не пробовали denwer немного поднастроить? Ни разу не замечал проблем особых... Тем более, скоро 4 версия появится
Уже пол года, как скоро
В созданном sendmail.php
Спасибо автору применил на wampserver 2 глушит и складывает в папку.
Только почему-то письма не содержат текста лишь кому от кого и тему В чём может быть проблема?
не в курсе как на MacOS такое сделать? стоит XAMPP но как-то не вышло заглушку запустить...
покурил интернеты и выкрутился SH скриптом:
создаем fake_sendmail.sh
prefix="/sites/sendmail/tmp"
date=`date \+\%Y\%m\%d\-%H\-%M\-%S`
name="$prefix/email-$date.eml"
cat >> $name
chmod 777 $name
сохраняем где удобно (я сохранил в /Applications/XAMPP/xamppfiles/bin/)
делаем его исполняемым (sudo chmod +x)
в php.ini меняем sendmail_path на sendmail_path = /Applications/XAMPP/xamppfiles/bin/fake_sendmail.sh
создаем папку для сбора писем (как видно у меня это /sites/sendmail/tmp), папке выставляем на редактирование кем угодно (0777)
перезапускаем Apache и готово
работать должно на всех UNIX/LINUX системах вроде как, отличаться будет только путями
единственная проблема с этим скриптом — при отправке из PHP формы сообщений сразу нескольким адресатам или при отправки копии письма себе (что одно и то же), этот скрипт все ложит в один файл, каким образом отслеживать конец сообщения и начинать писать в новый файл?