使用Rails 3发送大量电子邮件

3

我不仅是对Rails新手,而且对开发一般也是如此,如果这是一个基本问题,请原谅。我有一个应用程序,我想向选择加入的用户发送大量电子邮件(例如电子报)。 我有两个问题:(1)我的代码是否是处理群发邮件的最有效方式(例如,我是否需要使用for...each语句) (2)我在Stack Overflow上阅读了其他帖子,谈到邮件服务器的重要性和使用延迟任务来发送电子邮件。

请注意以下其他事项:

  • 我在Heroku上
  • 我考虑使用SendGrid
  • 我添加了基于这个教程的延迟任务代码

我的问题是:

  1. 即使是单个收件人的电子邮件(例如用户注册确认),大多数人是否都使用延迟任务?
  2. 我的代码是进行群发电子邮件的最有效方法吗?
  3. 例如,如果有1000个用户,如果我向每个人发送相同的电子邮件并使用BCC,它会在资源(带宽、CPU等)上造成很大的影响吗?如果是这样,我只需将哈希传递给电子邮件发送程序(即删除for...each并将opt_in_user参数更改为@opt_in_users),并将收件人更改为BCC?

谢谢!

控制器

commmunity_users = UserCommunityRelation.find('community_id = ? and status = ?,'      current_community, "approved" )
@opt_in_users = User.find('opt_in = ?,' true)

@opt_in_users.each do |opt_in_user|
  UserMailer.send_later(:deliver_announcement, opt_in_user)
end    

UserMailer.rb

def announcement(opt_in_user)
  mail(:to => "#{opt_in_user.username} <#{opt_in_user.email}>", :subject => "Huge Announcement!")
end
1个回答

2

对于批量发送邮件,你应该通过一个服务(我们使用Postbox,SendGrid是另一种选择)来进行发送。除了服务器负载外,服务还可能更适合处理退信、垃圾邮件拦截等问题,并且可能会提供额外的好处,例如追踪。

大多数人即使只是给单个收件人发送电子邮件(如用户注册确认邮件),也会使用延迟任务吗?

对于单个用户邮件,我会在控制器中使用直接发送邮件。

我的代码是否是批量发送电子邮件的最有效方法?

您不想让控制器动作管理任务队列,因为它会影响您网站的响应性。请使用cron作业和rake任务在后台完成它。

例如,如果有1000个用户。如果我使用BCC向每个人发送相同的电子邮件,是否会对资源(如带宽、CPU等)造成很大影响?如果是这样,我是否只需将哈希传递给邮件程序(即删除for...each并将opt_in_user参数更改为@ opt_in_users),并将收件人更改为BCC?

我认为BCC在资源使用方面是可以接受的,但你的服务器将会遭受任何退信的打击,而且它是需要管理的额外服务,因此我会像之前提到的那样选择使用服务。

顺便说一下,对于#each vs for...each的问题,迭代器的成本将会非常低,因此在我看来不值得考虑。


1
即使是一次性的电子邮件,我仍然会使用SendGrid。首要考虑更好的投递,其次是分析。 - Ryan Bigg
1
另外,您希望在可能的情况下使用Delayed Job,因为您正在与外部服务交互,并且不知道处理需要多长时间 - 让它在后台处理并将控制权返回给用户。 - John Beynon

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