Tutoriel N° 77
1/ Création d'une table pour recevoir les emails de désinscription
Sous phpmyadmin
CREATE TABLE IF NOT EXISTS `emailspam` (
`id_email` bigint(20) NOT NULL auto_increment,
`email` text,
`date` date default NULL,
PRIMARY KEY (`id_email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
2/ Script de désinscription php/mysql
En bas de votre mailing ajouter une ligne pour se désinscrire avec l'email envoyé en paramètre
http://www.domaine.com/efface.php?email=$email
efface.php
<form action="efface2.php" method="post">
<td>Saisir ici votre email pour être effacé</td> <td><input type="text" name="email" value="<?echo $email ?>"></td><td><input type="submit" value="Effacer email"></td>
</form>
efface2.php
<?
$base='xxx'; // remplacer par le nom de votre base
$login='xxx'; // remplacer par votre identifiant mysql
$pwd='xxx'; // remplacer par votre mot de passe mysql
$host='localhost';
$db=mysql_connect($host, $login, $pwd);
if(!mysql_select_db($base,$db))
{
echo "erreur ".mysql_error()."<br>";
mysql_close($db);
exit;
}
$date=date("Y-m-d");
$sql="DELETE from email where email='$email'";
mysql_query($sql);
mysql_close();
echo $email. "effacé";
?>
3/ Script d'envoi de mail php/mysql
mailscript.php
Je vous mets en bas de ce tutoriel la source de ce script
4/ Signatures domainkeys, dkim et spf
J'ai traité dans 2 autres tutoriaux l'optimisation de ce mail avec les signatures (spf, dkim et domainkeys).
voir tutoriel pour la mise en place des signatures dkim et domainkeys:
http://www.shareannonce.com/david/tutorial/65
si votre serveur est un RPS je vous conseille également ce tutoriel pour la config ipfailover
Ceci est necessaire pour le spf avec un serveur rps
http://www.shareannonce.com/david/tutorial/76
voir tutoriel pour la mise en place du spf:
http://www.shareannonce.com/david/tutorial/7d
5/ Gestion des NPAI
En ssh (remplacer domain par votre domaine)
cd /home/vpopmail/domains/domain.com/
#vi .qmail-default
| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
| /usr/local/php5/bin/php -q /home/domain/www/forward.php
Ce script va recevoir les emails entrants et notamment les mailer-daemon et les supprimer de votre table email.
forward.php
<?
// remplacer mondomaine par le nom de votre domaine
$base='xxx'; // remplacer par le nom de votre base
$login='xxx'; // remplacer par votre identifiant mysql
$pwd='xxx'; // remplacer par votre mot de passe mysql
$host='localhost';
$db=mysql_connect($host, $login, $pwd);
if(!mysql_select_db($base,$db))
{
echo "erreur ".mysql_error()."<br>";
mysql_close($db);
exit;
}
/* read the mail that is forwarded to the script *** */
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
//*** handle email ***
$lines = explode("n", $email);
// empty vars
$from = "";
$to = "";
$date = "";
$subject = "";
$message = "";
$splittingheaders = true;
for ($i=0; $i<count($lines); $i++) {
if ($splittingheaders) {
// look out for special headers
if ( (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) and ($subject=="") ){
$subject = $matches[1];
}
if ( (preg_match("/^From: (.*)/", $lines[$i], $matches)) and ($from=="") ){
if(strpos($lines[$i],"<"))
{
//the name exist too in from header
$data = explode('<',$lines[$i]);
$from = substr(trim($data[1]),0,-1);
}
else{
//only the mail
$from = $matches[1];
}
}
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
$to = $matches[1];
}
if (preg_match("/^Date: (.*)/", $lines[$i], $matches)) {
$date = $matches[1];
}
} else {
// not a header, but message
$message .= $lines[$i]."n";
}
#if (trim($lines[$i])=="") {
if ($i==45) {
// empty line, header section has ended
$splittingheaders = false;
}
}
$date=date("Y-m-d");
// efface de votre base email l'email entrant
$sql="delete from email where email='$to'";
mysql_query($sql);
mysql_close();
?>
PS/ Remplacez les valeurs manquantes pour chaque fichier et notamment les informations de connection de votre base de données MySql.
Pour le fichier mailscript.php vous devez également composer votre email HTML et texte notamment.