2010-08-19 4 views
19

Si j'envoie 100 e-mail à l'utilisateur enregistré et je veux savoir si les utilisateurs d'ouvrir un courriel ou nonEmail notification ouverte - Ruby on Rails

Comment puis-je faire cela en utilisant Ruby on Rails?

+0

La réponse de Doon ci-dessous est complète et précise. Je trouve que ce genre d'exigences vient généralement des parties prenantes qui ne voient que la partie "mail" du courrier électronique et insistent pour appliquer des garanties de livraison de courrier postal. Je pense que vous feriez mieux de parler à votre client et d'expliquer les limites pour eux. – Mhmmd

+2

Le problème n'est pas de savoir si elle a été ouverte, le problème est avec le "ou pas". L'ajout du bug Web traditionnel à un courriel HTML peut vous indiquer si un courriel a été ouvert. Il a peut-être été ouvert et vous ne le savez pas, mais il est peu probable que le bogue dirait qu'il a été ouvert alors que ce n'était pas le cas. Bien que moins que précis, c'est toujours une bonne mesure. Surtout quand on veut comparer le succès d'une campagne à une autre. –

Répondre

24

La seule façon d'y parvenir est d'utiliser l'email html avec une image tracker. Vous devez inclure une image spécifique à l'utilisateur dans le code.

class TrackingController < ApplicationController 
    def image 
    # do something with params[:id] 
    send_file "/path/to/an/image" 
    end 
end 

ajouter l'itinéraire suivant:

# Rails 2 
map.tracking_image "tracking_image/:id.gif", :controller => 'tracking', :action => image 

# Rails 3 
match 'products/:id', :to => 'tracking#image', :as => "tracking_image" 

# Rails 4 (match without verb is deprecated) 
get 'producsts/:id' => 'tracking#image', as: 'tracking_image' 
# or 
match 'producsts/:id' => 'tracking#image', as: 'tracking_image', via: :get 

dans votre modèle e-mail quelque chose comme ceci:

<%= image_tag tracking_image_url(@user.id) %> 

Mais sachez que cela, il est pas garanti que l'utilisateur lit le courrier électronique et charge l'image, certains clients de messagerie ne chargent pas d'images, jusqu'à ce que l'utilisateur le souhaite. Et s'il ne le fait pas, vous ne pouvez rien faire à ce sujet. Aussi, si l'utilisateur utilise le courrier texte, cela ne fonctionnera pas non plus.

+2

pour les images de rendu dans le navigateur ---- send_file "/path/to/an/image.gif",: type => 'image/gif',: disposition => 'en ligne' ---- send_file "/ chemin /to/an/image.jpg ",: type => 'image/jpeg',: disposition => 'en ligne' – SyntaxGoonoo

+0

point de vue technique - cette réponse a résolu mon problème. Oui - Je suis totalement d'accord avec @Doon –

9

Réponse courte, Vous ne pouvez pas. Réponse légèrement plus longue Vous ne pouvez pas fiable. En utilisant quelque chose comme VERP, vous pouvez automatiser le traitement du rebond, pour obtenir une assez bonne idée si le serveur de courrier distant a accepté l'email. Mais après cela, tous les paris sont désactivés. Vous ne pouvez pas vraiment dire ce que le serveur de messagerie a fait avec, (l'acheminer vers le dossier indésirable/spam, mettre dans la boîte de réception, le laisser tomber silencieusement sur le plancher/bit seau, etc.). Vous pouvez activer les en-têtes de confirmation de lecture dans votre e-mail, mais c'est spécifique au client (et les gens comme moi les mangent/les refusent). Vous pouvez envisager d'utiliser un bug Web, par exemple personnaliser chaque email avec un fichier HTML, qui tire une image distante, qui a un identifiant unique associé, mais à nouveau spécifique au client, la plupart ne chargera pas les images distantes. Donc, à moins que l'email ne rebondisse, il n'y a pas de moyen 100% fiable de dire ce qui arrive à l'email après qu'il quitte votre serveur.

+0

Oui - Je suis totalement d'accord avec vous. –

2

Je ne suis pas très familier avec ruby, mais j'ai écrit plusieurs applications de publipostage. Vous pouvez utiliser une image webbug pour obtenir un taux d'ouverture approximatif. Fondamentalement, il est juste un pixel ou une image transparente avec certaines informations de suivi:

<img src="http://mysite/trackingimage.gif?email=x&customer=y"> 

Ce que je fais est de faire un répertoire appelé trackingimage.gif avec un index dans ce qui lit et stocke les params url et repositionne ensuite à la image réelle