如何在Ruby on Rails中跟踪电子邮件?

5
我正在使用Rails 4.0,想了解如何获取电子邮件跟踪信息。
也就是说,我想知道有多少用户打开了我的邮件以及何时打开,是否已删除或已读取。
简而言之,我想知道如何在成功交付后跟踪电子邮件相关信息。

1
尝试在电子邮件模板中放置一个像素,该像素通过您的应用程序路由,每当有人打开您的邮件时,像素将被下载,您可以轻松地增加其计数器以了解您的邮件已被打开多少次。为了使其更具特色,附加用户的唯一标识,然后跟踪它们。如果电子邮件未被打开,则无法跟踪其是否已被删除。 - Surya
你唯一能做到的是在电子邮件中包含一张图片,并通过分析跟踪服务器上的请求,但现在大多数情况下,谷歌服务器会提前下载图片,或者它将被客户端阻止。 - Xander Luciano
1
有一个宝石可以实现这个功能,但我还没有测试过:https://github.com/ankane/ahoy_email - max pleaner
我实现电子邮件度量的方法是使用像SendGrid这样的第三方解决方案。不确定您是否想要一个自己建立的解决方案,但SendGrid允许您实现您所需的功能,包括追踪交付情况、已打开的邮件、点击次数、退件、垃圾邮件报告等内容。 - rii
我认为评论中提供的各种想法的变化表明这个问题对于这种格式来说太过宽泛。希望这些评论能给你一些尝试的思路,当你有更具体的问题时,可以在这里提出。 - Wayne Conrad
4个回答

4
我将为您举个例子,说明我如何实现这个功能:
1. 我的CustomMailer类生成一个谷歌跟踪链接,类似于: http://www.google-analytics.com/collect?v=1&tid= Tracking ID&cid=Customer ID&t=Event hit type&ec=Event Category&ea=Event Action&el=Event Label&cs=Campaign Source&cm=Campaign Medium&cn=Campaign Name @google_analytics_url = url 2. 我的CustomMailView将此链接添加到图像(像素图像)中: <img src=<%= @google_analytics_url %> width=1 height=1 /> 更多关于不同谷歌分析参数的一般信息请参见: https://www.formget.com/email-tracking-google-analytics/ 官方文档rails official docs提供了完整的示例: http://guides.rubyonrails.org/action_mailer_basics.html
class UserMailer < ApplicationMailer
  default from: 'notifications@example.com'

  def welcome_email(user)
    @user = user
    @google_analytics_url  = 'http://www.google-analytics.com/collect?v=1&tid=UA-****&cid=CustomerID&t=event&ec=open_email&ea=Event Action&el=Event Label&cs=Campaign Source&cm=Campaign Medium&cn=Campaign Name'
    mail(to: @user.email, subject: 'Welcome to My Awesome Site')
  end
end

查看 mail_view.html.erb 文件:

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1>Welcome to example.com, <%= @user.name %></h1>
    <p>
      You have successfully signed up to example.com,
      your username is: <%= @user.login %>.<br>
    </p>
    <p>
      To login to the site, just follow this link: <%= @url %>.
    </p>
    <p>Thanks for joining and have a great day!</p>
    <img src=<%= @google_analytics_url %> width=1 height=1 />
  </body>
</html>

1

非常感谢。这个答案对我很有用。 - Jigar Bhatt

1

你可以在其中插入一个像素,并跟踪它已被下载的次数,就像一个图片一样。我无法写出确切的方法,因为我从未尝试过,但我相信可以这样做。


0

我曾经为此苦苦挣扎,现在终于找到了解决方案。

首先,你的邮件发送器应该像这样:

UserMailer

class UserMailer < ApplicationMailer


    default from: 'aniket.tiw@gmail.com'

    def send_mail(email,body ,subject,user)
        @body = body

        @user = user
        mail(to: email, subject: subject)
    end


end

现在让我们创建路由。

routes.rb

Rails.application.routes.draw do

  get '/trackemail/:id', to: 'users#track_email'

end

现在,在进入视图之前,您必须安装Localtunnel,以便每当有人打开电子邮件时,它会被重定向,因为Gmail不知道本地主机。

我已经附上了链接link,说明如何安装localtunnel。

正如您在我的视图中看到的那样,我还附加了一个随机字符串。我这样做是因为第一次该方法起作用,但然后Gmail缓存我们的记录。因此,每次URL都应该是新的,图像才会打开。您甚至可以通过给出样式来隐藏图像。

user_mailer/send_mail.html.erb

<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />

  </head>
  <body >
    <h1>Hi  </h1>
    <p>
      <%= @body %>

       <% str = (0...8).map { (65 + rand(26)).chr }.join %>
      <img src=<%="https://morwhnykzf.localtunnel.me/#{@user.id}?#{str} "%> class="profile" />
    </p>

  </body>
</html>

用户控制器

    class UsersController < ApplicationController
     def track_email
        send_file("/home/aniketshivamtiwari/Desktop/track.jpg",:disposition => true,:type=> 'image/jpeg',:x_sendfile => true)

      end

end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接