procmailrc e php

0

Isso não funciona. É suposto que me envie um email (como um teste; o que realmente queremos que o arquivo php faça é inserir em uma tabela de banco de dados mySQL)

A entrada é uma mensagem de notificação de pagamento do PayPal.

(Uma receita similar faz encontrar a linha de descrição e enviá-la para dois de nós)

o procmailrc:

VERBOSE=off
MAILDIR=/usr/home/our/mail
LOGFILE=/usr/home/our/paypal.log
EXITCODE = 99

:0b
|base64 -d|grep -i Description|php tp129.php

o arquivo php:

$rawmessage = "";
$fd = fopen("php://stdin", "r");
while(!feof($fd)) {
$rawmessage .= fread($fd, 1024);
}
fclose($fd);

$msg129 = 'raw is ' .$rawmessage;

mail('[email protected]','msg129',$msg129 );
    
por Sheldon 29.01.2016 / 22:57

2 respostas

1

A função mail() do PHP requer uma mensagem de email válida, com cabeçalhos completos. Parece que seu código só produz um corpo de correio (a menos que o conteúdo decodificado base64 contenha os cabeçalhos; mas, mesmo assim, adicionar uma string arbitrária na frente deles destruiria a mensagem).

Sua atribuição explícita de EXITCODE encerraria o Procmail com uma mensagem de erro se não fosse pelo fato de conter um erro de sintaxe. No shell script e, portanto, também no Procmail, não é permitido espaços em branco ao redor de um sinal de igual em uma atribuição. Não está claro o que você espera alcançar com o EXITCODE ; minha sugestão é simplesmente deixar de fora.

Dado que seu objetivo final é importar a mensagem para o MySQL, eu proporia um teste mais simples: Abra um segundo arquivo para anexar e grave a saída lá. Isso deve mostrar se o código PHP está funcionando conforme o esperado. (Talvez adicione um registro de data e hora para ver quando os resultados foram escritos, para que você não acabe examinando os resultados antigos. Talvez você queira substituir em vez de acrescentar, contanto que esteja testando; mas o carimbo de data ainda Se o PHP é sua ferramenta de escolha, sinta-se à vontade para ficar com isso, embora eu suspeite que isso seria muito mais simples como um pequeno script de shell, que você provavelmente poderia incluir em seu .procmailrc . Dependendo do seu esquema de banco de dados, algo como

:0b
| base64 -d | \
  sed -n '/Description/s/.*/insert into table (field1,field2,field3) values (&);/p' \
  | mysql -uyou -pxyzzy -s db

Nesse meio tempo, eis como resolvo seu problema imediato.

O programa PHP inteiro pode ser substituído por uma única parte do script sed: sed '1s/^/raw is /' para evitar um inútil uso de grep Eu também consideraria a pesquisa por Description .

:0bfw   # Can be simplified if your sed supports a case-insensitive flag
| base64 -d | \
  sed -n '/[Dd][Ee][Ss][Cc][Rr][Ii][Pp][Tt][Ii][Oo][Nn]/s/^/raw is /p'
:0
! [email protected]

A ação de encaminhamento manterá os cabeçalhos originais. Se não é isso que você deseja, talvez extraia os que deseja manter, por exemplo, com formail ; ou crie cabeçalhos inteiramente novos com printf . Você poderia substituir a segunda receita simples pela ação ! [email protected] por algo um pouco mais complexo, como talvez o seguinte:

:0fhw
| ( formail -XSubject:; \
    printf "From: %s\nTo: %s\n" "[email protected]" "[email protected]" )
:0
! -t

( sendmail -t significa pegar o que dizem os cabeçalhos da mensagem e enviar a mensagem para lá.)

Para depuração, seu arquivo de receita não deve conter VERBOSE=off explícito. Este é o padrão, o que não faz sentido substituir; mas codificação torna impossível depurar suas receitas com VERBOSE=yes na linha de comando do Procmail.

    
por 30.01.2016 / 12:25
0

Eu vejo algumas coisas que você pode querer corrigir:

  1. Verifique seu arquivo $HOME/.forward . Eu acho que tem que ter 644 permissões, e conter uma única linha: "| /usr/bin/procmail" para obter procmail para fazer as coisas com seu email. Verifique o caminho real para procmail - pode ser /bin/procmail ou outra coisa no seu sistema. Supostamente, você precisa ter o caminho completo para procmail em .forward .
  2. Coloque <?php na primeira linha do arquivo tp129.php Além disso, seu pipeline pode precisar ter o caminho completo para o interpretador php , /usr/bin/php ou o que for.
  3. Verifique os parâmetros em .procmailrc . Os nomes dos arquivos em MAILDIR=/usr/home/our/mail e LOGFILE=/usr/home/our/paypal.log parecem suspeitos. Isto é, /usr/home/ é um diretório estranho. Os diretórios "home" do ID do usuário geralmente estão em /home ou /u , muito raramente, se algum dia, sob /usr .
  4. Execute o código PHP sozinho: php tp129.php e digite algum texto, qualquer texto e ctrl-D. Isso envia e-mail para o (s) endereço (s) desejado (s)? Se não, corrija o que causar isso.
por 29.01.2016 / 23:34

Tags