2010-08-19 7 views
19

Если я пошлю 100 электронную почту к зарегистрированному пользователю, и я хочу знать, если пользователи открывают электронную почту или неEmail открытое уведомление - рубин на рельсах

Как я могу сделать это с помощью Ruby On Rails?

+0

Ниже представлен подробный и точный ответ Doon. Я нахожу, что эти требования обычно поступают от заинтересованных сторон, которые видят только «электронную почту» в электронной почте и настаивают на том, чтобы присылать письма с доставкой по электронной почте. Я думаю, вам лучше поговорить с вами и объяснить им ограничения. – Mhmmd

+2

Проблема заключается не в том, чтобы знать, была ли она открыта, проблема с «или нет». Добавление традиционной веб-ошибки в электронную почту HTML может сообщить вам, было ли электронное письмо открыто. Возможно, он был открыт, и вы этого не знаете, но маловероятно, что ошибка скажет, что он был открыт, когда это не было. Хотя он не является точным, он по-прежнему является хорошей мерой. Особенно, когда вы хотите сравнить успех одной кампании с другой. –

ответ

24

Единственный способ сделать это - использовать html-адрес электронной почты с изображением трекера. Вам нужно включить в код определенное пользователем изображение.

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

добавить следующий маршрут:

# 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 

в почтовом шаблоне что-то вроде этого:

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

Но надо знать, что это это не гарантирует, что пользователь читает электронную почту и загружает изображение, некоторые почтовые клиенты не загружают изображения, пока пользователь не захочет. И если он этого не сделает, вы ничего не сможете с этим поделать. Также, если пользователь использует текстовую почту, это не будет работать.

+2

для рендеринга изображений в браузере ---- 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

техническая точка зрения - этот ответ решил мою проблему. Да, я полностью согласен с @Doon –

9

Короткий ответ, вы не можете. Чуть более длинный ответ. Вы не можете надежно.

Используя что-то вроде VERP, вы можете автоматизировать обработку отказов, чтобы получить неплохую идею, если почтовый сервер дальнего конца принял электронное письмо. Но после этого все ставки отключены. Вы не можете сказать, что сделал с ним почтовый сервер (маршрутизируйте его в папку нежелательной почты/спама, поместите в папку «Входящие», тихонько опустите его на пол/бит ведро и т. Д.). Вы можете включить заголовки чтения-получения в свой адрес электронной почты, но это зависит от клиента (и такие люди, как я, есть/запрещают их). Вы можете изучить веб-ошибку, например настроить каждую электронную почту с помощью HTML-файла, который вытаскивает удаленное изображение с уникальным идентификатором, связанным с ним, но с особым клиентом, большинство из них не загружает удаленные изображения. Таким образом, если только письмо не отскакивает, нет 100% надежного способа рассказать, что происходит с электронной почтой после его выхода из вашего сервера.

+0

Да, я полностью согласен с вами. –

2

Я не очень хорошо знаком с рубином, но написал несколько массовых почтовых приложений. Вы можете использовать изображение веб-камеры, чтобы получить приблизительный открытый курс. В основном это просто один пиксель или прозрачное изображение с некоторым отслеживанием информации:

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

Что я могу сделать, это сделать каталог с именем trackingimage.gif с индексом в нем, который считывает и сохраняет URL-адрес Params, а затем переезжает в реальный образ.