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
Другие вопросы по тегам