2010-08-19 17 views
19

Se mi invierà 100 e-mail all'utente registrato e voglio sapere se gli utenti di posta elettronica aperto o nonEmail open notifica - Ruby on Rails

Come posso fare questo usando Ruby on Rails?

+0

La risposta di Doon in basso è accurata e accurata. Trovo che questo tipo di requisiti provengano solitamente da parti interessate che vedono solo la parte "email" della posta elettronica e insistono nell'applicare la firma per posta elettronica con garanzie di consegna. Penso che tu stia meglio parlando con il tuo cliente e spiegandogli i limiti. – Mhmmd

+2

Il problema non è nel voler sapere se è stato aperto, il problema è con "o non". L'aggiunta del tradizionale bug Web a una email HTML può dirti se è stata aperta un'email. Potrebbe essere stato aperto e tu non lo sai, ma è abbastanza improbabile che il bug direbbe che è stato aperto quando non lo era. Sebbene non accurato, è comunque una buona misura. Soprattutto quando si vuole confrontare il successo di una campagna con un'altra. –

risposta

24

L'unico modo per farlo è utilizzare l'html email con un'immagine tracker. È necessario includere un'immagine specifica dell'utente nel codice.

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

aggiungere la seguente percorso:

# 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 

nel vostro modello e-mail simile a questa:

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

ma essere consapevoli, che questo non è garantito che l'utente legge la posta elettronica e carica l'immagine, alcuni client di posta elettronica non caricano le immagini, fino a quando l'utente non lo desidera. E se non lo fa, non puoi fare nulla al riguardo. Inoltre se l'utente utilizza la posta di testo solo questo non funzionerà neanche.

+2

per il rendering di immagini nel browser ---- send_file "/path/to/an/image.gif",: type => 'image/gif',: disposition => 'inline' ---- send_file "/ path /to/an/image.jpg ",: type => 'image/jpeg',: disposition => 'inline' – SyntaxGoonoo

+0

punto di vista tecnico - questa risposta ha risolto il mio problema. Sì, sono totalmente d'accordo con @Doon –

9

Risposta breve, non è possibile. Risposta leggermente più lunga Non puoi affidarti in modo affidabile.

Utilizzando qualcosa come VERP è possibile automatizzare l'elaborazione di bounce, per ottenere un'idea abbastanza buona se il server di posta remoto ha accettato l'e-mail. Ma dopo che tutte le scommesse sono spente. Non si può veramente dire cosa ha fatto il server di posta elettronica, (indirizzarlo alla cartella junk/spam, inserire la posta in arrivo, rilasciarlo silenziosamente sul bucket floor/bit, ecc.). Puoi abilitare le intestazioni di ricevuta di lettura nella tua e-mail, ma questo è specifico per il cliente (e le persone come me le mangiano/negano). È possibile esaminare l'utilizzo di un bug Web, ad esempio personalizzare ciascuna e-mail con un file HTML, che estrae un'immagine remota, che ha un ID univoco associato ad essa, ma ancora una volta specifica del client, la maggior parte non carica le immagini remote. Quindi, a meno che l'email non rimbalzi non esiste un modo affidabile al 100% per dire cosa succede all'email dopo che ha lasciato il tuo server.

+0

Sì, sono totalmente d'accordo con te. –

2

Non ho molta familiarità con Ruby ma ho scritto più app di massa. Puoi usare un'immagine webbug per ottenere una percentuale di apertura approssimativa. Fondamentalmente è solo un pixel o un'immagine trasparente con alcune informazioni di tracciamento:

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

quello che faccio è fare una directory chiamata trackingimage.gif con un indice in esso che legge e memorizza i params url e poi si trasferisce al immagine reale.