2010-08-19 11 views
19

Si yo envío 100 de correo electrónico al usuario registrado y quiero saber si los usuarios de correo electrónico abierto o nocorreo electrónico de notificación abierta - rubí en los carriles

¿Cómo puedo hacer esto usando Ruby on Rails?

+0

La respuesta de Doon a continuación es exhaustiva y precisa. Encuentro que este tipo de requisitos generalmente provienen de partes interesadas que solo ven la parte de "correo" del correo electrónico e insisten en solicitar que se envíen por correo electrónico las garantías de entrega del correo de caracol. Creo que es mejor que hables con tu cliente y les expliques las limitaciones. – Mhmmd

+2

El problema no está en querer saber si se abrió, el problema es con "o no". Agregar el error web tradicional a un correo electrónico HTML puede indicarle si se abrió un correo electrónico. Puede haber sido abierto y no lo sabes, pero es bastante improbable que el error dijera que se abrió cuando no lo era. Aunque es menos que preciso, sigue siendo una buena medida. Especialmente cuando se quiere comparar el éxito de una campaña con otra. –

Respuesta

24

La única forma de hacerlo es utilizar el correo electrónico html con una imagen de rastreador. Debe incluir una imagen específica del usuario en el código.

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

añadir la siguiente ruta:

# 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 

en su plantilla de correo algo como esto:

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

pero tenga en cuenta, que esto no se garantiza que el usuario lee el correo electrónico y carga la imagen, algunos clientes de correo electrónico no cargan imágenes hasta que el usuario lo desee. Y si no lo hace, no puedes hacer nada al respecto. Además, si el usuario usa el correo de texto, esto tampoco funcionará.

+2

para imágenes renderizadas en el navegador ---- 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 de vista técnico - esta respuesta resolvió mi problema. Sí, estoy totalmente de acuerdo con @Doon –

9

Respuesta corta, no se puede. Respuesta un poco más larga No se puede confiablemente.

Usando algo como VERP puede automatizar el procesamiento de rebote, para obtener una idea bastante buena si el servidor de correo del otro extremo aceptó el correo electrónico. Pero después de eso, todas las apuestas están apagadas. Realmente no se puede saber qué hizo el servidor de correo electrónico con eso (enrutarlo a la carpeta de correo basura/correo no deseado, ponerlo en la bandeja de entrada, colocarlo silenciosamente en el cubo de piso/bit, etc.). Puede habilitar los encabezados de lectura de recibos en su correo electrónico, pero eso es específico del cliente (y las personas como yo los comen/los niegan). Puede buscar el uso de un error en la web, por ejemplo, personalizar cada correo electrónico con un archivo HTML, que extrae una imagen remota, que tiene una identificación única asociada a ella, pero de nuevo específica del cliente, la mayoría no cargará imágenes remotas. Por lo tanto, a menos que el correo electrónico rebote, no hay una manera 100% confiable de saber qué sucede con el correo electrónico después de que abandone su servidor.

+0

Sí, estoy totalmente de acuerdo con usted. –

2

No estoy muy familiarizado con ruby, pero he escrito varias aplicaciones de correo masivo. Puede usar una imagen webbug para obtener una tasa de apertura aproximada. Básicamente se trata de sólo un píxel o imagen transparente con un poco de información de seguimiento:

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

Lo que hago es hacer un directorio llamado trackingimage.gif con un índice en ella que lee y almacena los parametros url y luego se traslada a la imagen real

Cuestiones relacionadas