fetchmail: как пересылать письма в php скрипт - используя procmail?
Я пытаюсь выяснить, как я могу переслать (или передать) письмо на скрипт php, используя fetchmail. Я никогда не делал этого и даже не уверен, что я на правильном пути. Из того, что я прочитал, я думаю, что мне нужно использовать MDA для пересылки почты. Я использую procmail в качестве моего MDA.
Вот мой файл fetcmailrc
set daemon 150
set logfile /local/web/sites/sitename/mail/fetchmail.log
poll blahblah with proto IMAP
user Username there with password userpassword is Username here
ssl
fetchall
no rewrite
mda "/usr/bin/procmail -d Username -f %F -d %T $HOME/.procmailrc";
Вот мой файл procmailrc. Внизу видно, что я пытаюсь передать письмо в скрипт php.
SHELL=/bin/csh
DEFAULT=/var/mail/Username/
MAILDIR=/var/mail/Username/
:0
! `/usr/local/bin/php -f /local/web/sites/stack/htdocs/bin/catchmail.php`
Я запускаю fetchmail, а fowarding (piping to php) не работает. Мой fetchmail.log говорит:
procmail: Insufficient prvileges
procmail: Unknown user
Есть указатели? Я даже направился в правильном направлении? Благодарю.
1 ответ
Вы не передаете PHP, вы отправляете электронное письмо на адрес, который выводит ваш PHP-скрипт. Вы, вероятно, хотите изменить восклицательный знак (!
) к трубе (|
) чтобы рецепт делал то, что вы описали.
Сообщение об ошибке от Procmail указывает на то, что вы вызываете его неправильно, или в нем отсутствует бит setuid или что-то в этом роде. Я не эксперт по Fetchmail, но mda
линия выглядит подозрительно - вряд ли вам захочется двух противоречивых -d
флаги как минимум. Может быть, это проблема прямо здесь. Путь к .procmailrc
будет выведен Procmail с -d
вариант. Попробуйте что-нибудь попроще, например так:
mda "/usr/bin/procmail -f %F -d %T"
Кстати, назначение SHELL=/bin/csh
кажется действительно вне линии. По моему опыту, пытаясь использовать csh
или же tcsh
с Procmail просто не работает. (В любом случае, читайте, что программирование на Csh считается вредным.) Если вы точно знаете, что делаете, объясните, пожалуйста, почему у вас это есть. В противном случае выньте его, прежде чем делать что-либо еще.