Я установил 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