procmail не выполняет скрипт php
На моем FreeBSD 7.2 я настроил SMS-шлюз kannel - сервис работает отлично.
Я сейчас пытаюсь настроить функцию email2sms. Для этого я создал системного пользователя с именем kannel
и все письма пересылаются этому пользователю.
В доме реж kannel
у меня есть следующие файлы.
-rw-r--r-- 1 kannel kannel 81B 17 jan 09:50 .procmailrc
lrwxr-x--- 1 root kannel 58B 14 jan 13:24 email2sms.php @ -> some-what-some-where
-rw-rw-rw- 1 root kannel 5,8K 17 jan 09:52 log.email2sms
-rw------- 1 kannel kannel 1,3K 17 jan 09:50 procmail.log
-rw-r----- 1 root kannel 606B 14 jan 13:28 rawmail.txt
Файл email2sms.php
символическая ссылка на скрипт php (приложение ZendFramework), который получает письмо от STDIN
и использует ZendFramework для анализа этой почты в объекте. Затем он делает HTTP-запрос к SMS-шлюзу. PHP-скрипт работает.
Содержание .procmailrc
LOGFILE=$HOME/procmail.log
VERBOSE=yes
:0
| php email2sms.php >> log.email2sms
Из последнего отправленного письма у меня есть это в procmail.log
procmail: [97744] Mon Jan 17 09:50:40 2011
procmail: [97744] Mon Jan 17 09:50:40 2011
procmail: Assigning "LASTFOLDER= php email2sms.php >> log.email2sms"
procmail: Executing " php email2sms.php >> log.email2sms"
procmail: Notified comsat: "kannel@:/home/user/kannel/ php email2sms.php >> log.email2sms"
From my@email.tld Mon Jan 17 09:50:40 2011
Subject: asdf as
Folder: php email2sms.php >> log.email2sms 2600
Но в log.email2sms нет новых выходных данных, и сценарий должен выводить тему письма.
Если я sudo
как kannel
Пользователь и направить файл с сырой электронной почтой в сценарий, он выполняется просто отлично.
[root@webserver /home/user/kannel]# /home/user/kannel/ sudo -u kannel cat rawmail.txt | php email2sms.php >> log.email2sms
И команда выводит на log.email2sms
по желанию.
Есть идеи, ребята?
ОБНОВИТЬ
Я изменил phpscript просто die('bail me out scotty');
и скрипт выполняется из.procmail при отправке электронной почты. Файл log.email2sms
сопровождается текстом залога.
Так что, возможно, содержимое почты не передается по конвейеру, или класс Zend Framework, который обрабатывает переданные данные из STDIN, содержит ошибки.
2 ответа
Проблема была не в procmail, а в скрипте ZendFramework, который у меня был.
В ZendFramework для чтения электронной почты из STDIN используйте:
// will use file_get_contents()
$email = new Zend_Mail_Message(array('file' => "php://stdin"));
И не:
// will use stream_get_contents()
$email = new Zend_Mail_Message(array('file' => "STDIN"));
Примечание для себя: не используйте советы, не приведенные в комментариях
Похоже, проблема с ограниченной оболочкой, убедитесь, что команда php находится в пути, также для отладки procmail вы всегда можете добавить в начало файла
LOGFILE=$HOME/procmail.log
VERBOSE=on