Почта в PHP кажется неудачной, но где? - PullRequest
1 голос
/ 22 октября 2011

Я настроил почту на входящий адрес для пересылки в postfix псевдониму для php-скрипта. Я думаю, что это работает из-за следующих записей в mail.log:

Oct 22 00:07:02 doodle postfix/qmgr[19688]: 60AB5688811C: from=<me@gmail.com>, size=1468, nrcpt=1 (queue active)
Oct 22 00:07:17 doodle postfix/local[26486]: 60AB5688811C: to=<php_mail_handler@localhost>, orig_to=<php@doodle.com>, relay=local, delay=16, delays=1.8/0.1/0/14, dsn=2.0.0, status=sent (delivered to command:  php /home/doodle/htdocs/mail_handler.php)
Oct 22 00:07:17 doodle postfix/qmgr[19688]: 60AB5688811C: removed

Похоже, что postfix доставляет его в скрипт. Я не получаю сообщение об ошибке, возвращаемое к моей электронной почте, и все же скрипт не выполняется (он должен записать время в файл). Скрипт работает из командной строки и из веб-исполнения. Его код:

<?php
$f = fopen('php.txt','a+');

fwrite($f,date('Y-m-d h:i:s')."\n");
fclose($f);

?>

Мой файл псевдонимов содержит:

php_mail_handler: "| php /home.doodle/htdocs/mail_handler.php"

Моя первоначальная проблема заключается в том, что он молча терпит неудачу - mail.log, как можно видеть выше, предполагает, что все хорошо. Есть ли журнал, который скажет мне, почему php не выполняется, что я могу проверить? Есть идеи по поводу общей проблемы? Похоже, что примерно похожие сообщения в форумах для sendmail говорят, что для этого требуются символические ссылки в smrsh, но я ничего не нашел, говоря, что postfix требует этого.

Любая помощь будет принята с благодарностью.

Mat

Ответы [ 3 ]

1 голос
/ 18 сентября 2012

Возвращаясь к этому спустя годы, я снова столкнулся и решил ту же проблему:

Postfix использует непривилегированного пользователя «nobody» для выполнения конвейерных команд от псевдонимов. Чтобы преодолеть это, создайте пользователя с необходимыми привилегиями и назначьте default_privs в main.cf (вам нужно будет добавить строку):

default_privs = mynewuser

Перезапустите, и вас нет.

1 голос
/ 14 апреля 2015

если решение Michaels не сработает, вместо использования

$f = fopen('php.txt','a+');
fwrite($f,date('Y-m-d h:i:s')."\n");

try

system("echo 'it works!' > /home/yourname/php.txt");

На моей новой установке wheezy вызов php CLI для postfix не смог получить доступ к fopen и fwrite.

0 голосов
/ 22 октября 2011

Добавьте shebang в начало скрипта PHP, сделайте его исполняемым и удалите php из вызова канала.Это позволяет избежать любых проблем, которые могут возникнуть у постфикса при разрешении пути к бинарному файлу PHP.

// Top of the PHP file...
#!/usr/bin/php -q

# Alias file:
php_mail_handler: "|/home/doodle/htdocs/mail_handler.php"

# make it executable
chmod +x /home/doodle/htdocs/mail_handler.php
...