El teu blog de Linux en català

[PHP] Codi per recomptar si un mail s'ha obert

A la feina avui m’he trobat amb una petició que mai havia hagut de resoldre abans. És una petició senzilla, però no tenia del tot clar com fer-la. El nostre client ens ha demanat que, a l’hora d’enviar un butlletí als seus subscriptors, poder fer el recompte de quants d’ells havien obert el correu.

El mètode següent només funciona quan el lector de correu pot llegir HTML (gairebé tots actualment) i en cas que es carreguen les imatges. En aquest cas, només és necessari afegir al cos del missatge, al principi o al final, el següent codi:
<img src="http://domini.cat/recompte_lectures.php?p1=xx&p2=yy/" />

I el fitxer recompte_lectures.php seria:

header('Content-Type: image/png');
readfile('http://www.domini.cat/img/punt.png');
/* Codi per augmentar les lectures */

El que estem fent és posar una imatge però referenciada a un fitxer php. Aquest fitxer php tindrà una capçalera que indicarà que s’ha de carregar una imatge, però que a més augmentarà en un el número de lectures del mail. D’aquesta manera, cada cop que un subscriptor òbriga el butlletí, automàticament en carregar aquesta imatge es farà una petició al servidor que augmentarà el número de lectures en 1.

  • Aquest header està fet per a imatge png (també podeu posar jpg, gif, etc.)
  • La imatge «punt.png» pot ser un punt d’1x1px que podeu crear amb el Gimp
  • Evidentment el codi per augmentar el nombre de lectures depèn de vosaltres
  1. Reply

    Això ho coneixia per píxels de seguiment i són una merda per l’spam :/ serveixen per verificar qe un correu existeix i després enviar-hi encara més publicitat…

    http://en.wikipedia.org/wiki/Web_bug

    • greips on 23 de març de 2011 at 19:41

    Reply

    Tb hi ha la forma classica de mirar els logs o les estadisitques. Al carregar les imatges en remot sempre et.queda registrat i ho pots veure facilment amb, per exemple, el webalizer. O fent un grep al log de l’apache…

      • Pau on 23 de març de 2011 at 22:19
      • Author

      Reply

      Gràcies per la recomanació, greips. Però la informació que em dóna el webalizer o l’apache és massa general. Per exemple, jo necessite saber l’impacte d’un butlletí concret enviat als subscriptors. Amb aquest mètode, passant-li com a paràmetre l’id del butlletí, puc fer el recompte fàcilment. A més, puc emmagatzemar-ho a la base de dades i després mostrar-ho a la gestió de la pàgina per tal que els clients ho puguen veure ràpidament.

      Pregunte: creus que amb un grep a l’apache o mirant el webalizer es pot aconseguir això?

    • Jordi on 23 de març de 2011 at 20:29

    Reply

    Mmm… interessant. Però, de fet, això permet executar qualsevol codi en el servidor sense que els antivirus del client puguin detectar-ho, no?

      • Pau on 23 de març de 2011 at 22:21
      • Author

      Reply

      Comor? Això el que fa és simplement cridar a un fitxer.php que, en el meu cas, rep com a paràmetre l’id del butlletí enviat als subscriptors. Així puc fer un recompte de les persones que han obert aquest butlletí en concret.

        • Jordi on 23 de març de 2011 at 23:22

        Reply

        Sí, ja entenc que tu no faràs res d’estrany 🙂

        El que pregunto és si utilitzant aquesta mateixa tècnica es podria fer. És a dir, si el codi PHP s’executa en el client o en el servidor i, per tant, si és visible per un antivirus en el client, o no.

          • Roger on 24 de març de 2011 at 10:10

          Reply

          Al servidor, no al client…

          O sigui, si vols et pots posar un virus a tu mateix, però no sé si acaba de ser interessant 🙂

          Genial l’apunt, ara es porta molt això…. També es fa servir molt el sistema de trackejar quanta gent ha fet click a un determinat enllaç…

          De totes maneres no hi ha algun software que fagi el seguiment del butlleti? Estic segur que n’hi ha (que siguin lliures). Em venen noms al cap com phplist, no sé si n’hi ha algun mes…

            • Pau on 24 de març de 2011 at 10:21
            • Author

            Probablement n’hi ha. El que passa és que m’és més fàcil fer això que no pas fer servir un sistema extern. Al nostre sistema de gestió tenim implementat el butlletí, només ens calia fer un parell de canvis per fer el tracking.

            Respecte als clics als enllaços, també ho he implementat. Bàsicament el que faig és fer un cerca i reemplaça a les cadenes per cercar tots els enllaços i afegir-los un paràmetre identificador del butlletí. No sé si és la millor manera, i evidentment es pot millorar, però com ja he comentat abans, és suficient.

    • Toni on 23 de març de 2011 at 23:26

    Reply

    Crec que per ser del tot honestos hauríeu de verificar que el client no envia DNT:1 a la capçalera HTTP de petició de la imatge, és a dir, comprovar si té la preferència “don’t track me” activada i “honorar-la”, que diuen els anglòfons.
    Al un bloc de can Mozilla en parlaven no fa gaire: http://blog.mozilla.com/blog/2011/02/08/mozilla-firefox-4-beta-now-including-do-not-track-capabilities/

      • Pau on 23 de març de 2011 at 23:43
      • Author

      Reply

      Interessant, Toni, tot i que no arribe a entendre la relació. Veig que, de tota manera, aquesta és una característica que no s’activa per defecte. Cal dir també que només es vol fer una estimació: és clar que fer-ho realment precís requereix tindre en compte moltes coses. El client no paga tant 😛

        • Toni on 24 de març de 2011 at 01:10

        Reply

        Ei Pau, estic d’acord en que aquest tipus de tracking a l’usuari que comentes, fet amb un mailing, no és al 100% el típic “cas d’ús” (tal i com l’entenc) que aquesta opció de privacitat intenta establir, però tampoc tinc clar que no ho sigui..
        Els clients normalment paguen prou per arribar a les *parts interessants* dels projectes 😉
        Una dita que m’agrada pels projectes que representa que tenen parts més interessants és aquella de “the cake is always a lie”

  2. Reply

    Això és el que fa servir la gent de google quan et subscrius a canals RSS que es gestionen amb Feedburner.

    La diferència en el seu cas respecte el teu és que la imatge ja és el paràmetre de manera que no cal cridar a cap php sinó que si al gent és molt paranoica veuran que igualment carreguen una imatge.

    • z4m0 on 24 de març de 2011 at 18:16

    Reply

    També hi ha la possibilitat de afegir una capçalera al mail i llavors a el receptor li surt un missatge on se li pregunta si vol enviar un acús de rebut i ha de confirmar o rebutjar, penso que és un sistema més net i transparent, ja que l’usuari sap que està passant.
    $headers .= “Disposition-Notification-To:”;
    diria que és afegir això als headers de l’email però no n’estic segur.

      • Pau on 24 de març de 2011 at 18:43
      • Author

      Reply

      Seria més net i respectuós, però realment no ens serviria de res, ja que el nombre d’usuaris que confirmaren eixa petició seria probablement molt baixa. El tracking que es fa és completament anònim actualment (no es recull ni l’adreça, ni la ip, ni cap altra informació de l’usuari que no es tinga ja per haver sigut usuari del web).

      Entenc, però, que les estadístiques, encara que siguen anònimes, haurien de ser consentides. Però tampoc no tinc clar això, ja que fins i tot, a qualsevol web on entrem, s’estan registrant les nostres dades sense consentiment…

Deixa un comentari

Your email address will not be published.