Rail 4 邮件程序使用密件抄送和取消订阅功能发送群发电子邮件

Rail 4 mailer sending mass email with bcc and unsubscribe feature

我正在开发一个具有订阅功能的小型博客。它将通过带有 mandrill 服务的密件抄送邮件将过去一周的热门帖子通知给订阅者。它工作正常,但我被困在取消订阅功能上。据我所知,任何订户收到的邮件都与密件抄送相同,所以我可能也是。 所以我的问题是如何通过密件抄送邮件附加每个订阅者唯一的 link 以允许他们取消订阅? 这是我的代码片段:

addresses = subscription_emails.all.pluck(:email)
mail(from: "no-reply@blog.com", bcc: addresses,subject: "Posts of past week")

据我了解你的问题,退订 url 将在电子邮件的内容中。

为了让它发挥作用,我建议您为邮件模板生成一个唯一标识符,然后您可以使用它来识别取消订阅的用户。

检查:http://guides.rubyonrails.org/action_mailer_basics.html 第 2.1.3 点 - 创建邮件程序视图。

假设您的模板包含以下内容:

<p>
  Here is your email contents
</p>
<p><a href="#{@unsubscribe_url}">Unsubscribe</a></p>

这个 unsubscribe_url 变量会生成类似这样的东西:

http://your-domain.com/newsletter/unsubscribe/unique-id-generated-for-the-user

在您的 config/routes.rb 文件中创建一个路由,将您带到处理取消订阅的控制器。

你也可以看这里:http://railscasts.com/episodes/312-sending-html-email

编辑

不幸的是,根据我在 Mandrill 的文档中看到的内容,我认为您没有办法将合并变量与密件抄送列表中的电子邮件进行一对一映射。

这样我看到了两种可能的解决方案:

a) 您实际上并没有为每个用户提供唯一的 ID,而是您有一个通用的 link,它将带您进入取消订阅页面。 例如:

http://your-domain.com/newsletter/unsubscribe

这将呈现一个带有输入的页面,您可以在其中要求此人写下他们的电子邮件地址。 使用此解决方案,您必须考虑不良的用户行为,例如:

  • 插入的电子邮件不属于您的用户列表
  • 爱丽丝输入了鲍勃的电子邮件

b) 你破坏了向 mandrill 发送电子邮件请求的逻辑。通过这种方式,您可以保留唯一 ID 登录名,而不是发送要密件抄送的电子邮件列表,而是一个接一个地发送电子邮件请求。