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.