Назад | Перейти на главную страницу

procmail не выполняет скрипт php

Я установил SMS-шлюз kannel на FreeBSD 7.2 - служба отлично работает.

Сейчас я пытаюсь настроить функцию 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 user и передайте скрипту файл с необработанным электронным письмом, он работает нормально.

[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, есть ошибки.

Проблема была не в procmail, а в скрипте Zend Framework, который у меня был.

В 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