Erro do Procmail ao enviar o corpo para o script php

0

Eu tenho uma receita do procmail que pega o corpo de um e-mail e o envia para um script php. No entanto, o procmail reclama com um erro.

Veja como funciona: O usuário que precisa acessar os parâmetros de hardware deve se cadastrar via e-mail assim:
Assunto: Registrar-se Corpo:? Username: email_address: password ??

O Procmail envia o corpo para o script php para ser processado. A razão pela qual eu uso "??" é tornar mais fácil para mim filtrar o lixo do que vem com o corpo via grep.

Aqui está o erro em procmail.log:

From fetchmail  Fri Nov 25 15:41:36 2016
Subject: Register
Folder: /root/mail/inbox/inbox                     3673
procmail: [20601] Fri Nov 25 15:43:44 2016
procmail: Assigning "DEFAULT=/root/mail/inbox/inbox"
procmail: Assigning "PMDIR=/root/.procmail"
procmail: Match on "^Subject.*[R|r]egister$"
procmail: Executing "/usr/bin/php,-f,/root/data/scripts/register.php"
procmail: Executing "??myusername:[email protected]:mypass1??"
/bin/sh: 0: Can't open ??myusername:[email protected]:mypass1??

Aqui está minha receita do procmail:

SHELL=/bin/sh
HOME=$HOME
PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
SENDMAIL=/usr/sbin/sendmail
MAILDIR=$HOME/mail
LOGFILE=/var/log/procmail.log
LOGABSTRACT="all"
VERBOSE="on"
DEFAULT=$HOME/mail/inbox/inbox
PMDIR=$HOME/.procmail
:0
* ^Subject.*[R|r]egister$
{
  :0 bf
  | '/usr/bin/php -f /root/data/scripts/register.php'
}

Aqui está um trecho abreviado do script register.php:

#!/usr/bin/php
<?php
while ( false !== ( $user_register = fgets ( STDIN ) ) )
{
  $user_info = preg_match ( "/\?\?.*\?\?/", @$user_register, $new_registration ) ;
  foreach ( $new_registration as $input )
  {
    print ( $input."\n" ) ;
  }
}

Eu não acho que tenha algo a ver com o código php, já que tenho receitas e código php similarmente estruturados.

Algum apontador?

    
por Danny 25.11.2016 / 17:29

1 resposta

1

A sintaxe correta é remover os backquotes em torno do script PHP, a menos que seu objetivo específico seja imprimir o nome do comando para o qual você deseja enviar a mensagem em sua saída padrão.

Em outras palavras,

echo "moo" | 'echo wc'

é equivalente a

echo "moo" | wc

Existem várias outras simplificações e correções que você pode fazer. As condições do Procmail não diferenciam maiúsculas de minúsculas por padrão (e não acredito que você queira corresponder a |egister do código atual) e não há necessidade de usar chaves apenas para adicionar algumas sinalizações.

:0bf
* ^Subject.*register$
| /usr/bin/php -f /root/data/scripts/register.php
    
por 25.11.2016 / 22:33

Tags