none
Tracking d'email RRS feed

  • Question

  • Bonjour,
    je suis entrain de créer une application en c# qui envoie plusieurs newletters et je cherche un moyen pour tracker ces mails.
    j'aimerais savoir si le mail ::
    - a été ouvert
    - consulté 
    - supprimé
    - s'il s'est désinscrit de la newsletter
    - sa position géographique.
    Vous me direz qu'il y a de très bon outils qui fournisse déjà ce service mai le soucis c'est  il sont free au début et puis il deviennent payant. 
    J'ai deja été voir sur ce tuto :http://humann.developpez.com/httphandler/
    Mais ça ne pas bcp aidé car j'ai pas trop compris comment faire.
    Merci d'avance.
    mardi 31 janvier 2012 09:04

Réponses

  • Bonjour,

    OK.

    Le HttpHandler, il faut le voir comme un module qui écoute une requête HTTP (http://www.toto.com) et qui retourne du contenu (HTML, XML, Image,...).

    Imaginons que l'on a fait un HttpHandler qui fonctionne sur cette url : http://www.monsiteweb.com/monhttphandler.ashx

    Dans votre navigateur si vous saisissez cette URL, une requête va être faite sur le serveur et en particulier dans l'application ASP .NET. ASP .NET va réveiller votre HttpHandler exécuter du code et récupérer du contenu que vous lui renverrai. Ce contenu sera affiché dans la navigateur.

    Vous pouvez voir 3 extensibilités :

    - Une programmation totale du Handler (c'est du code C# et vous pouvez faire ce que vous voulez !).
    - Vous pouvez renvoyer ce que vous voulez (HTML, Image, Fichier texte,...etc).
    - Vous pouvez aussi renvoyer rien du tout ! (C'est à dire juste exécuter du code).

    Dans votre cas, il faut créer un Handler qui renvoi une image. Dans votre newsletter, vous mettez une url vers cette image (via la balise <img src=http://.../monHandler.ashx />.

    Dans le code votre handler, vous devez bien évidemment renvoyer une image, mais aussi "loguer" tout ce que vous voulez (Date/Heure, ...etc) !

    Quand est-ce que votre handler va être déclenché ? Tout simplement lorsque l'utilisateur va afficher votre image, ce qui va provoquer une requête sur votre Handler et donc l'exécuter !

    Est-ce que cela vous parait plus clair (du moins l'idée) ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 31 janvier 2012 16:24
    Modérateur
  • Bonsoir,

    En fait, comme te l'a expliqué Gilles, le concept du HTTPHandler est d'intercepter une demande faite au serveur Web. Dans ton cas ça donne ça : 

    - Tu crées un HttpHandler (Generic Handler dans Visual Studio - Extension .ashx) sur ton serveur, dans lequel tu pourras mettre du code.

    - Tu mets une balise image quelconque dans ton mail. En lieu et place de la source, tu mets l'URL de ton handler.

    Ex : <img src="http://tonsite.fr/monhandler.ashx" />

    A ce stade, tu sais que l'image doit être fournie par ton handler, sinon rien ne sera affiché. Mais tu peux aussi y mettre tout le code qui t'intéresse. Et entre autres, enregistrer des informations concernant l'utilisateur qui a ouvert le mail. Par exemple, tu peux, en ajoutant des paramètres "personnalisés" dans l'URL appelée par ta balise <img>, enregistrer quel utilisateur a affiché ton mail.

    Genre, quand tu envoie ta newsletter, tu peux envoyer un mail distinct à chaque "client", en mettant l'id de ton client dans l'URL, genre 

    <img src=tonsite.fr/monhandler.ashx?id=24587 />

     

    Maintenant tu sais qu'en arrivant dans le handler, tu auras l'id de ton client dans la QueryString. Dans le Handler en question, tu as une méthode ProcessRequest. C'est dans celle là que tu dois faire tout ce que tu veux, sans oublier de renvoyer une image. Ton code peut ressembler, par exemple, à ça : 

     

            public void ProcessRequest(HttpContext context)
            {
                var idClient = context.Request.QueryString["id"];
                
                //Ici tu peux enregistrer l'id dans une base de données, ou un fichier, ou tout ce que tu veux.
                //Tu peux aussi récupérer l'IP du client et utiliser un service de recherche adapté pour avoir 
                //la localisation géographique de ton client.
                //....
                //....
     
                //On n'oublie pas de renvoyer une image ! Ici, le logo qui est dans le dossier images
                //Le code ci-dessous est (en gros) issu du site http://humann.developpez.com/httphandler/
     
                // Recupere le chemin du logo sur le disque
                string path = context.Server.MapPath("~/images/logo.jpg");
                // Chargement de l'image
                System.Drawing.Image img = System.Drawing.Image.FromFile(path);
                // Reallisation de la miniature en 200x200
                img = img.GetThumbnailImage(200, 200, nullnew IntPtr());
                // Envoie de l'image au client
                img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                // Liberer les ressources
                img.Dispose();
            }

     

     

    Et là, résultat : L'utilisateur voit une image, et toi tu sais qu'il l'a vue !

    Est-ce que ça te parait plus clair ? As-tu besoin d'informations supplémentaires ?

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.

    mardi 31 janvier 2012 21:13
  • Mes excuses, un peu de mal ce matin. En fait, ton HTTP handler est un peu comme une page Web. Tu lui envoies une requête, il exécute ce que tu veux et renvoie ce que tu veux. Dans le cas que nous avons vu, tu appelles ton handler comme si c'était une image. Il doit donc renvoyer une image, mais peut avant ça effectuer des traitements.

    Le client, qu'il soit un client Web, Desktop ou Mobile, appelle ton handler de 2 manières : 

    - Soit directement, comme on l'a vu, et dans ce cas ton résultat dépend de ton handler (Effectivement, une image n'est affichée que si ton handler "n'oublie pas" de la renvoyer

    - Soit en triturant un peu ton fichier de config pour, par exemple, qu'il soit appelé à chaque fois qu'une requête concernant une page aspx arrive à ton serveur. Dans ce cas, ton résultat ne dépend pas de ton hlandler, et tu peux le rajouter uniquement en rajoutant quelques lignes dans le fichier Web.Config et bien sur, en l'implémentant.

    Je t'invite à fouiller un peu sur le net pour comprendre le fonctionnement du second. Pour ma part, je regarderai ça dans la journée pour te donner des informations plus précises.

     

    Cordialement,

    Sébastien

     

     


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    mercredi 1 février 2012 09:25

Toutes les réponses

  • Bonjour,

    Qu'est ce que vous n'avez pas très bien compris dans la réalisation du HttpHandler.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 31 janvier 2012 13:42
    Modérateur
  • enfaite c'est tout le concept que je comprend pas je lis le liens que vous m'avez envoyer et je ne comprend pas comment dans mon application je peux faire pour integrer cette technique .

     

    C'est un vrai problème de compréhension et c'est pas faute d'avoir essayer !!

    mardi 31 janvier 2012 13:47
  • Bonjour,

    OK.

    Le HttpHandler, il faut le voir comme un module qui écoute une requête HTTP (http://www.toto.com) et qui retourne du contenu (HTML, XML, Image,...).

    Imaginons que l'on a fait un HttpHandler qui fonctionne sur cette url : http://www.monsiteweb.com/monhttphandler.ashx

    Dans votre navigateur si vous saisissez cette URL, une requête va être faite sur le serveur et en particulier dans l'application ASP .NET. ASP .NET va réveiller votre HttpHandler exécuter du code et récupérer du contenu que vous lui renverrai. Ce contenu sera affiché dans la navigateur.

    Vous pouvez voir 3 extensibilités :

    - Une programmation totale du Handler (c'est du code C# et vous pouvez faire ce que vous voulez !).
    - Vous pouvez renvoyer ce que vous voulez (HTML, Image, Fichier texte,...etc).
    - Vous pouvez aussi renvoyer rien du tout ! (C'est à dire juste exécuter du code).

    Dans votre cas, il faut créer un Handler qui renvoi une image. Dans votre newsletter, vous mettez une url vers cette image (via la balise <img src=http://.../monHandler.ashx />.

    Dans le code votre handler, vous devez bien évidemment renvoyer une image, mais aussi "loguer" tout ce que vous voulez (Date/Heure, ...etc) !

    Quand est-ce que votre handler va être déclenché ? Tout simplement lorsque l'utilisateur va afficher votre image, ce qui va provoquer une requête sur votre Handler et donc l'exécuter !

    Est-ce que cela vous parait plus clair (du moins l'idée) ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 31 janvier 2012 16:24
    Modérateur
  • Oui parfait, comme d'habitude vous m'avez été d'une grande aide.

     

    Maintenant si j'ai bien compris. quand je créerais ma newsletter dans mon editeur avant chaque envoie je vais inserer cette "image espion"?

     

    Comment je peux creer cette image ?

    et comme je fais maintenant pour pister mes mails ? quel est la marche à suivre en sachant que je pars de rien ?

     

    mardi 31 janvier 2012 16:35
  • Bonsoir,

    En fait, comme te l'a expliqué Gilles, le concept du HTTPHandler est d'intercepter une demande faite au serveur Web. Dans ton cas ça donne ça : 

    - Tu crées un HttpHandler (Generic Handler dans Visual Studio - Extension .ashx) sur ton serveur, dans lequel tu pourras mettre du code.

    - Tu mets une balise image quelconque dans ton mail. En lieu et place de la source, tu mets l'URL de ton handler.

    Ex : <img src="http://tonsite.fr/monhandler.ashx" />

    A ce stade, tu sais que l'image doit être fournie par ton handler, sinon rien ne sera affiché. Mais tu peux aussi y mettre tout le code qui t'intéresse. Et entre autres, enregistrer des informations concernant l'utilisateur qui a ouvert le mail. Par exemple, tu peux, en ajoutant des paramètres "personnalisés" dans l'URL appelée par ta balise <img>, enregistrer quel utilisateur a affiché ton mail.

    Genre, quand tu envoie ta newsletter, tu peux envoyer un mail distinct à chaque "client", en mettant l'id de ton client dans l'URL, genre 

    <img src=tonsite.fr/monhandler.ashx?id=24587 />

     

    Maintenant tu sais qu'en arrivant dans le handler, tu auras l'id de ton client dans la QueryString. Dans le Handler en question, tu as une méthode ProcessRequest. C'est dans celle là que tu dois faire tout ce que tu veux, sans oublier de renvoyer une image. Ton code peut ressembler, par exemple, à ça : 

     

            public void ProcessRequest(HttpContext context)
            {
                var idClient = context.Request.QueryString["id"];
                
                //Ici tu peux enregistrer l'id dans une base de données, ou un fichier, ou tout ce que tu veux.
                //Tu peux aussi récupérer l'IP du client et utiliser un service de recherche adapté pour avoir 
                //la localisation géographique de ton client.
                //....
                //....
     
                //On n'oublie pas de renvoyer une image ! Ici, le logo qui est dans le dossier images
                //Le code ci-dessous est (en gros) issu du site http://humann.developpez.com/httphandler/
     
                // Recupere le chemin du logo sur le disque
                string path = context.Server.MapPath("~/images/logo.jpg");
                // Chargement de l'image
                System.Drawing.Image img = System.Drawing.Image.FromFile(path);
                // Reallisation de la miniature en 200x200
                img = img.GetThumbnailImage(200, 200, nullnew IntPtr());
                // Envoie de l'image au client
                img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                // Liberer les ressources
                img.Dispose();
            }

     

     

    Et là, résultat : L'utilisateur voit une image, et toi tu sais qu'il l'a vue !

    Est-ce que ça te parait plus clair ? As-tu besoin d'informations supplémentaires ?

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.

    mardi 31 janvier 2012 21:13
  • c'est vrai que c'est plus claire mais un peu plus d'infos sur la fonction de communiquer entre mon HTTpHAndler et mon appplication serais la bienvenue :)

     

    Merci beaucoup pour tout :)

    mercredi 1 février 2012 09:10
  • Bonjour,

    Dis moi, quelle information aimerais tu avoir ? Un point te parait obscur ?

    Est-ce que les informations que nous t'avons données t'ont permis de résoudre ton problème ?

    Cordialement,

    Sébastien


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    mercredi 1 février 2012 09:12
  • Mes excuses, un peu de mal ce matin. En fait, ton HTTP handler est un peu comme une page Web. Tu lui envoies une requête, il exécute ce que tu veux et renvoie ce que tu veux. Dans le cas que nous avons vu, tu appelles ton handler comme si c'était une image. Il doit donc renvoyer une image, mais peut avant ça effectuer des traitements.

    Le client, qu'il soit un client Web, Desktop ou Mobile, appelle ton handler de 2 manières : 

    - Soit directement, comme on l'a vu, et dans ce cas ton résultat dépend de ton handler (Effectivement, une image n'est affichée que si ton handler "n'oublie pas" de la renvoyer

    - Soit en triturant un peu ton fichier de config pour, par exemple, qu'il soit appelé à chaque fois qu'une requête concernant une page aspx arrive à ton serveur. Dans ce cas, ton résultat ne dépend pas de ton hlandler, et tu peux le rajouter uniquement en rajoutant quelques lignes dans le fichier Web.Config et bien sur, en l'implémentant.

    Je t'invite à fouiller un peu sur le net pour comprendre le fonctionnement du second. Pour ma part, je regarderai ça dans la journée pour te donner des informations plus précises.

     

    Cordialement,

    Sébastien

     

     


    Sébastien Putier
    Consultant - Formateur technologies Microsoft
    Blog : http://sputier.wordpress.com
    MCTS Développement d'application Windows 4.0 / Data Access 4.0
    Si un post vous parait utile, n'oubliez pas de le marquer comme utile. S'il répond à votre question, n'oubliez pas de le marquer comme réponse.
    mercredi 1 février 2012 09:25
  • Merci bcp sebastien je vais suivre tes conseils et lire tout ce que je trouve  :)
    mercredi 1 février 2012 10:26