Отладочная заглушка для mail()

fixxxer

К.О.
Партнер клуба
на перле эстетичнее ;)

PHP:
#!/usr/bin/env perl
open(F, ">/tmp/" . time . ".eml");
print F while (<>);
 

iceman

говнокодер
так тоже не работает, очевидно, что скрипт не вызывается.
как ты это проверяешь?
тестируй через консоль
...
чтото типа такого может быть...
PHP:
<?php
$fp = fopen('php://stdin','r');
$mail = fread($fp, 'свободная_память');
file_put_contents('напиши_тут_абсолютный_путь', $mail);
?>
PS: насчет sendmail_path нечего не могу сказать
 

The employer

Новичок
Re: Отладочная заглушка для mail()

Автор оригинала: no_santa
цель - перехватывать письма отправляемые mail(), в процессе отладки
А ощущение такое, как будто ты решаешь другую задачу - эмуляцию почтовика на PHP.

Если задача - понять что ты делаешь не так при формировании писем, то это же не так делается. Ты должен определить свою функцию (или класс), и везде, во всем приложении где ты вызываешь mail() - вместо этого вызываешь свою функцию (или метод класса), который уже ведет лог.

Если задача - понять что ты нормально настроил отправку почты, то это тоже не так делается. Берется fakemail - и вперед.

С эмуляцией почтовика тоже можно помочь, но насколько это надо тебе прямо сейчас, с учетом того что задача перед тобой вроде бы стоит другая?
 

no_santa

Снегур
Re: Re: Отладочная заглушка для mail()

Автор оригинала: The employer
А ощущение такое, как будто ты решаешь другую задачу - эмуляцию почтовика на PHP.

Если задача - понять что ты делаешь не так при формировании писем, то это же не так делается. Ты должен определить свою функцию (или класс), и везде, во всем приложении где ты вызываешь mail() - вместо этого вызываешь свою функцию (или метод класса), который уже ведет лог.
С новым годом! :)


Автор оригинала: The employer
Если задача - понять что ты нормально настроил отправку почты, то это тоже не так делается. Берется fakemail - и вперед.
И с Рождеством! ;)

-~{}~ 26.07.09 16:22:

Автор оригинала: iceman
как ты это проверяешь?
тестируй через консоль
так и делаю, через консоль работает
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Код:
php -i | grep sendmail
выполни, и покажи, пожалуйста?

-~{}~ 26.07.09 19:31:

Да, кстати, если у тебя Дебиан или иже с ним, не забудь, что там разные php.ini для коммандной строки и CGI
 

no_santa

Снегур
Автор оригинала: флоппик
Код:
php -i | grep sendmail
выполни, и покажи, пожалуйста?
PHP:
sendmail_from => no value => no value
sendmail_path => /usr/sbin/sendmail -t -i => /usr/sbin/sendmail -t -i
Path to sendmail => /usr/sbin/sendmail -t -i

Автор оригинала: флоппик
Да, кстати, если у тебя Дебиан или иже с ним, не забудь, что там разные php.ini для коммандной строки и CGI
Где-ж ты раньше был!!! :)
Я редактирую /etc/php5/apache2/php.ini, есть еще /etc/php5/cli - но ведь это тоже не то?

phpinfo показывает указанный мной sendmail path.

Попробовал еще такой вариант программы:
PHP:
$stream = '';
$fp = fopen('php://stdin','rb');
while($t=fread($fp,2048))
    {
    if( $t===chr(0) )
        break;
    $stream .= $t;
    }
fclose($fp);
$fp = fopen(date('Y-m-d_H-i-s_').'.eml','w');
fwrite($fp,iconv("UTF-8","CP1251",$stream));
fclose($fp);
 

no_santa

Снегур
<tr><td class="e">sendmail_from</td><td class="v"><i>no value</i></td><td class="v"><i>no value</i></td></tr>
<tr><td class="e">sendmail_path</td><td class="v">/usr/sbin/sendmail&nbsp;-t&nbsp;-i</td><td class="v">/usr/sbin/sendmail&nbsp;-t&nbsp;-i</td></tr>
<tr><td class="e">Path to sendmail </td><td class="v">/usr/sbin/sendmail -t -i </td></tr>
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Угу. Отсюда мораль, что из php.ini эти значения не взялись.
Может, забыл вебсервер рестартовать после изменения php.ini?
 

no_santa

Снегур
Шутишь? Третий день подряд каждые 5 минут apache2ctl restart....

-~{}~ 27.07.09 13:18:

...не считая десятка ребутов, найтслип таймбрейка и 3л багбир бульбуля вчера вечером...
 

iceman

говнокодер
и? ты ведь нам не показал как ты тестишь, что ты смотришь? приз в студию!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
phpinfo - там где верхняя табличка Loaded conf file гляди. Где-то, что-то, ты пропускаешь..
 

yyh

Новичок
Так работает:

php.ini:
sendmail_path =/data/web/sendmail.php

sendmail.php:
PHP:
#!/usr/php5/bin/php           
<?php
 $mail = ''; 
$end = 0; 

 while($end<3){
      if(!$line = trim(fgets(STDIN)))$end++;
     $mail.="\n".$line;
  } 

 file_put_contents("/data/web/mail.eml", $mail);     //обязательно абсолютный путь к файлу 
?>
можно смотреть, что возвращает функция mail() - вернет true, если все нормально,
и false если нет (если не найден путь к php СLI или sendmail.php или ошибка в sendmail.php
 
Сверху