Oct
7
2013

Logger les mails envoyés par la fonction mail


Dans cet article nous allons voir comment tracer les mails envoyer par un site web utilisant la fonction mail.

Cette procédure est très utile pour traquer le site qui spam sur un serveur mutualisé.

Procédure :

Créer le fichier /usr/sbin/phpsendmail et y insérer ceci :
[php]#!/usr/bin/php
<?php
$sendmail = ‘/usr/sbin/sendmail’;
$logfile = ‘/var/log/mail_php.log’;

/* Get email content */
$logline = ”;
$mail = ”;
$fp = fopen(‘php://stdin’, ‘r’);

while ($line = fgets($fp))
{
if(preg_match(‘/^to:/i’, $line) || preg_match(‘/^from:/i’, $line))
{
$logline .= trim($line).’ ‘;
}
$mail .= $line;
}

/* Build sendmail command */
$cmd = ‘echo ‘ . escapeshellarg($mail) . ‘ | ‘.$sendmail.’ -t -i’;
for ($i = 1; $i < $_SERVER[‘argc’]; $i++)
{
$cmd .= escapeshellarg($_SERVER[‘argv’][$i]).’ ‘;
}

/* Log line */
$path = isset($_ENV[‘PWD’]) ? $_ENV[‘PWD’] : $_SERVER[‘PWD’];
file_put_contents($logfile, date(‘Y-m-d H:i:s’) . ‘ ‘ . $logline .’ ==> ‘ .$path."\n", FILE_APPEND);

/* Call sendmail */
return shell_exec($command);
?>[/php]

Creer le fichier log et changer les droits des deux fichiers :
[shell]
touch /var/log/mail_php.log
chmod 777 /var/log/mail_php.log
chmod 777 /usr/sbin/phpsendmail
[/shell]

Editez le fichier /etc/php.ini et modifier le chemin de sendmail pour qu’il pointe sur notre script phpsendmail :

[shell]
[mail function]
;SMTP = localhost
;smtp_port = 25
sendmail_path = /usr/sbin/phpsendmail
[/shell]

Redémarrez Apache et visualisez le log /var/log/mail_php.log

Articles similaires

Au sujet de l'auteur: Olivier Legras

Auteur de ce Blog, je partage quelques unes de mes notes que je juge utile à vous comme à moi. Je suis très heureux de voir que mon blog a de plus en plus d'affluence. Merci à vous!

Laissez un commentaire