EDIT par Felipe: un forumeur a attiré notre attention sur la news suivante de la CNIL: http://www.cnil.fr/index.php?id=1602&news
À vous de faire bon usage (=légal) de ce genre de script, sachant que dans le service dont il est question on a accès en plus aux infos comme "s’ils les ont transmis à d’autres personnes et depuis quel serveur de messagerie" et le point le plus important (mais IANAL) "le destinataire n’a pas le choix d’accepter ou de refuser de retourner les informations à l’abonné à « *** ». Il n’en est même pas informé. ". Ce qui se trouve ci-dessous est tout de même moins intrusif et n'empêche pas de respecter la règle de l'opt-in pour les particuliers/opt-out pour les professionnels
------------------
Bonjour,
J'ai développé un script php couplé avec une bdd permettant de faire du suivi d'e-mailing. A savoir: qui a lu le mail? quand? A-t-il visité le site web indiqué dans le mail depuis le mail?
Pour cela, je mets une balise <img> dans mon mail qui pointe vers une page php. Pour les infos de click sur les liens, j'ai modifié l'index du site avec un peu de php qui récupère l'IP et qui fait +1 sur un compteur dans la base de données.
Ma table sql retour possède 5 champs:
mail=mail du destinataire
nombre=nombre de lecture
date=date de lecture
adripmail= @Ip de lecture
web=nombre de visites sur le site depuis le mail
Lors de mon envoi de mail, j'importe toutes les adresses dans la table et j'initialise tous les champs.
J'aimerai avoir votre avis sur la façon dont j'ai codé le script (c'est mon premier script) et s'il est "optimal" (pas de cas boiteux oublié):
Voici l'algo final auquel je suis parvenu:
Voici le code associé:
J'ai pas tout mis car le début est pas utile, c'est la connexion au sql et la récupération du mail.
Pour ma part, je l'ai testé et il semble fournir le résultat attendu...
Merci d'avance de vous pencher dessus.
Modifié par Felipe (02 Sep 2008 - 13:26)
À vous de faire bon usage (=légal) de ce genre de script, sachant que dans le service dont il est question on a accès en plus aux infos comme "s’ils les ont transmis à d’autres personnes et depuis quel serveur de messagerie" et le point le plus important (mais IANAL) "le destinataire n’a pas le choix d’accepter ou de refuser de retourner les informations à l’abonné à « *** ». Il n’en est même pas informé. ". Ce qui se trouve ci-dessous est tout de même moins intrusif et n'empêche pas de respecter la règle de l'opt-in pour les particuliers/opt-out pour les professionnels
------------------
Bonjour,
J'ai développé un script php couplé avec une bdd permettant de faire du suivi d'e-mailing. A savoir: qui a lu le mail? quand? A-t-il visité le site web indiqué dans le mail depuis le mail?
Pour cela, je mets une balise <img> dans mon mail qui pointe vers une page php. Pour les infos de click sur les liens, j'ai modifié l'index du site avec un peu de php qui récupère l'IP et qui fait +1 sur un compteur dans la base de données.
Ma table sql retour possède 5 champs:
mail=mail du destinataire
nombre=nombre de lecture
date=date de lecture
adripmail= @Ip de lecture
web=nombre de visites sur le site depuis le mail
Lors de mon envoi de mail, j'importe toutes les adresses dans la table et j'initialise tous les champs.
J'aimerai avoir votre avis sur la façon dont j'ai codé le script (c'est mon premier script) et s'il est "optimal" (pas de cas boiteux oublié):
Voici l'algo final auquel je suis parvenu:
Voici le code associé:
<?php
//--Récupération de l'@ IP
if($_SERVER) {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
$adress = $_SERVER['HTTP_CLIENT_IP'];
else
$adress = $_SERVER['REMOTE_ADDR'];
}
else {
if(getenv('HTTP_X_FORWARDED_FOR'))
$adress = getenv('HTTP_X_FORWARDED_FOR');
elseif(getenv('HTTP_CLIENT_IP'))
$adress = getenv('HTTP_CLIENT_IP');
else
$adress = getenv('REMOTE_ADDR');
}
//Requête sur l'adresse IP
$iptmp=mysql_query("select adripmail from retour where mail='".$mail."'");
$adrip=mysql_fetch_assoc($iptmp);
//@IP = valeur par défaut -> nouvelle lecture -> mise à jour de tous les champs
if($adrip['adripmail']=="xx")
{
mysql_query("update retour set nombre=nombre+1, date='".$date."', adripmail='".$adress."' where mail='".$mail."'");
}
else //Seconde lecture
{
//Si @IP actuelle est différente de celle enregistrée
if($adress!=$adrip['adripmail'])
{
//Test pour éviter les doublons
$req=mysql_query("select * from retour where adripmail='".$adress."' and mail='".$mail."'");
$res=mysql_num_rows($req);
if($res=='0')
{
//Si non présent, on insère une nouvelle ligne dans la base
mysql_query("insert into retour(mail,nombre,date,adripmail) values('".$mail."','1','".$date."','".$adress."')");
}
else
{
//Sinon, update du compteur de lecture
mysql_query("update retour set nombre=nombre+1 where mail='".$mail."' and adripmail='".$adress."'");
}
}
else //Sinon update du compteur de lecture
{
mysql_query("update retour set nombre=nombre+1 where mail='".$mail."' and adripmail='".$adress."'");
}
}
//Fermeture de la connexion sql
mysql_close();
?>
J'ai pas tout mis car le début est pas utile, c'est la connexion au sql et la récupération du mail.
Pour ma part, je l'ai testé et il semble fournir le résultat attendu...
Merci d'avance de vous pencher dessus.
Modifié par Felipe (02 Sep 2008 - 13:26)