Isso tudo pressupõe que você deseja coletar informações sobre rejeições em vez do próprio email devolvido:
Eu tenho praticamente a mesma configuração com os hosts postfix, mysql e virtual. Da perspectiva do recurso de hardware n, a maneira mais eficiente de acompanhar isso é analisar os arquivos de log conforme você está fazendo. Mas se você acha que sua análise é muito grande, você pode usar um aplicativo como o Logwatch para fazer toda a análise para você. Em seguida, configure o Postfix para eliminar os arquivos devolvidos para você.
Agora, se você decidir que deseja coletar esses e-mails em algum lugar, poderá usar essas configurações no arquivo main.cf:
bounce_notice_recipient = [email protected]
error_notice_recipient = [email protected]
E se você quiser que os e-mails sejam completamente destruídos, você pode adicionar um usuário virtual e ajustar seu arquivo de aliases para enviá-los para dev / null
someone: /dev/null
Quanto a um script e um banco de dados eu trabalho muito com PHP e MySQL hoje em dia, então se eu usasse essas ferramentas eu poderia criar algum código php para ler o arquivo de log, procurar pelos saltos e então corrigi-los em um banco de dados. Então eu executei o código antes que o mail.log fosse truncado. Na verdade, vou postar o código aqui depois de escrevê-lo para chutes.
Aqui está algum código se você quer rodar isso com o php / mysql (eu tenho certeza que poderia ser mais bonito):
<?php
#parse_logs.php
# load local file into array
$val = file("mail.log");
$pattern = '/status=bounced/';
foreach ($val as &$value) {
if (preg_match($pattern,$value)) {
$a = split('[<>]', $value);
//if you prefer you can also use: preg_match_all('/<(.*)>/', '$value', $matches);
#can be helpful to print the following to the screen during tests
# echo $a[1];
// Make a MySQL Connection
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("postfix_db") or die(mysql_error());
// Insert a row of information into the table "example"
mysql_query("INSERT INTO emails (emailaddress) VALUES('$a[1]') ")
or die(mysql_error());
#again, if you want to see while running manually from cli
#echo "Data Inserted!";
}
#again, if you want to see while running manually from cli
#echo "\n";
}
?>
Você poderia, então, disparar um cron imediatamente antes de seu mail.log ser configurado para ser reciclado ou limpar o log quando o cron for acionado.
Parece um grande esforço para acompanhar os endereços de e-mail de e-mails devolvidos. Você precisará escrever consultas mysql para acessar essas informações, é claro.
Você também pode pular as coisas do mysql completamente e apenas canalizar os resultados para um arquivo de teste ou um endereço de e-mail (e também pode usar um cron)
php parse.php > results.txt
ou
php parse_logs.php | /usr/sbin/sendmail [email protected]