Como passar a saída do PHP mail.log para um script

1

Estou registrando toda a saída de e-mail do php usando a configuração mail.log no php.ini. Em vez de fazer o log para um arquivo, quero que os dados do log sejam enviados para um script para análise em tempo real para gerar alertas.

Eu tentei:     mail.log="| /path/to/script.php"

na esperança de que funcione como / etc / aliases, mas isso não funciona. Qualquer idéia muito apreciada: -)

O sistema é o Postfix no Debian.

    
por Peter 08.11.2014 / 10:54

2 respostas

2

Uma possível solução seria usar um wrapper para o comando sendmail, por exemplo, você pode criar um script como este:

#!/bin/sh
# file: sendmail-wrapper-php
# env vars: ${HTTP_HOST}, ${REMOTE_ADDR}, ${SCRIPT_NAME}, ${PWD}, ${UID}

# ....
# check and alert 

#send email.
/usr/sbin/sendmail -t -i $*

e php_set_envs.php definem algumas variáveis PHP para o ambiente shell:

<?php
putenv("HTTP_HOST=".@$_SERVER["HTTP_HOST"]);
putenv("SCRIPT_NAME=".@$_SERVER["SCRIPT_NAME"]);
putenv("SCRIPT_FILENAME=".@$_SERVER["SCRIPT_FILENAME"]);
putenv("DOCUMENT_ROOT=".@$_SERVER["DOCUMENT_ROOT"]);
putenv("REMOTE_ADDR=".@$_SERVER["REMOTE_ADDR"]);

Agora você força todos os clientes a usar esse script de wrapper em vez do original /usr/sbin/sendmail binary. Modifique seu php.ini e adicione / altere:

sendmail_path = /usr/sbin/sendmail-wrapper-php
auto_prepend_file = /www/php/php_set_envs.php

Certifique-se de que tenha permissões de acesso corretas:

$ chown root /usr/sbin/sendmail-wrapper-php
$ chmod 755 /usr/sbin/sendmail-wrapper-php

Espero que isso ajude.

    
por 12.11.2014 / 16:32
0

Use o cron para executar um script que verifica o arquivo mail.log a cada minuto.

//every minute 
* * * * * * php -f /path/to/script.php

Eu acho que com essa solução você tem que usar um banco de dados para lembrar de entradas digitalizadas

    
por 09.11.2014 / 17:20