使用Rails进行群发电子邮件3

时间:2012-01-19 00:01:36

标签: ruby-on-rails-3 heroku

我不仅是Rails的新手,而是一般的开发人员,所以如果这是一个基本问题我会道歉。我有一个应用程序,我想向选择加入的用户发送大量电子邮件(即简报)。我有两个问题:(1)我的代码是处理群发邮件的最有效方式(即我需要使用for ...每个语句)和(2)我阅读Stack Overflow上关于重要性的其他帖子邮件服务器和使用延迟作业发送电子邮件。

其他注意事项:

  • 我在Heroku上
  • 我在考虑使用SendGrid
  • 我根据this tutorial
  • 添加了延迟的工作代码

我的问题是:

  1. 大多数人使用延迟的工作,即使是单个收件人电子邮件(即用户注册确认)?
  2. 我的代码是最有效的群发电子邮件方式吗?
  3. 例如,如果有1000个用户。如果我向每个人发送带有BCC的相同电子邮件,它是否会对资源(即带宽,CPU等)产生很大影响。如果是这样,我是否只是将哈希传递给邮件程序(即删除for ... each并将opt_in_user参数更改为@opt_in_users)并将收件人更改为密件抄送?
  4. 谢谢!

    控制器

    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 个答案:

答案 0 :(得分:2)

对于批量发送,你一定要通过服务发送它(我们使用邮箱,SendGrid是另一种选择)。除了服务器上的负载之外,服务还可能更适合跳出,垃圾邮件拦截器等,它可能会提供额外的好处,例如跟踪。

  

即使是单个收件人电子邮件(即用户注册确认),大多数人都会使用延迟的工作吗?

对于单用户电子邮件,我会在控制器中使用直接电子邮件。

  

我的代码是最有效的群发电子邮件方式吗?

您不希望控制器操作管理排队任务,因为它会影响您的网站响应能力。使用cron作业和rake任务在后台执行。

  

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

我认为BCC在资源使用方面很好,但是你的服务器会受到任何反弹的影响,而且这是一项额外的管理服务,因此,我会选择前面提到的服务

顺便说一句,对于#each vs for ...每个问题,迭代器的成本将会非常低,以至于不值得考虑IMO。