19/08/2019, 10:44

Tracking Email Open In Rails

Trong bài viết này sẽ thực hiện theo dõi việc mở mail đã gửi thường để phục vụ cho marketing hay tùy theo yêu cầu của dự án. Coding Bắt đầu bằng tạo model EmailOpen: rails g model EmailOpen email:string ip:string Định nghĩa tracking endpoint trong routes.rb: get "/beacon" , ...

Trong bài viết này sẽ thực hiện theo dõi việc mở mail đã gửi thường để phục vụ cho marketing hay tùy theo yêu cầu của dự án.

Coding

Bắt đầu bằng tạo model EmailOpen:

rails g model EmailOpen email:string ip:string

Định nghĩa tracking endpoint trong routes.rb:

get "/beacon", to: "tracking#beacon"

Mẹo nhỏ ở đây để hook về server minh là chèn 1 ảnh transparent 1x1px vào trong mail, tải về với link hoặc có thể tự tạo bằng các cộng cụ khác cũng được.

Với nội dung mail sẽ định nghĩa như sau:

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  </head>
  <body>
    Tiktok!!
    <img src="<%= email_tracker_url(@email) %>" >
  </body>
</html>

Định nghĩa helper cho url để mã hóa với Base64:

module TrackingHelper
  def email_tracker_url email
    "http://localhost:3000/beacon?data=#{Base64.encode64(email)}"
  end
end

khi người dùng mở mail sẽ hook về tracking endpoint:

class TrackingController < ApplicationController
  def beacon
    email = Base64.decode64 params[:data]

    EmailOpen.find_or_create_by(email: email) do |e|
      e.ip = request.ip
    end

    send_file "public/beacon.png", type: "image/png"
  end
end

Ở đây sử dụng find_or_create_by để tránh việc tạo ra nhiều bản ghi cùng 1 người dùng, một nữa khi người dùng trả lời mail cũng mở bằng mail cũ đã lưu.

Để test chức năng này có thể chạy trong console hoặc gửi qua form với email muốn gửi. Các bạn có clone source code của minh để tham khảo thêm.

Kết quả

  • Đây là form để test

tracking email open app

  • Mở mail đã gửi(minh dùng letter-opener-web)

tracking email open app open mail

  • Đây là log của server

tracking email open app log

  • Kiểm tra đã tạo thành công

tracking email open app console

Kết luận

Cảm ơn các bạn đã đọc bài viết             </div>
            
            <div class=

0