如何使用ActionMailer向大量人员发送电子邮件

时间:2013-11-11 06:18:10

标签: ruby-on-rails ruby-on-rails-3 actionmailer

我正在尝试向很多人发送电子邮件 我以前用下面的代码表示没问题。

但是,我刚注意到我的第一个虚拟帐户收到了电子邮件,其他人没有收到任何邮件。

这用于向所有用户发送电子邮件,然后它确实在之前完美运行 现在我甚至在垃圾邮件箱中找不到任何消息。

我从未改变过代码。只有差异是与之前相比的用户数量。我认为它工作正常,直到大约有2000个用户。 现在,大约有8000名用户。

会出现什么问题?我该怎么做才能解决这个问题?

messages_controller.rb 此处有超过8000名活跃用户。

users = User.all.order("created_at ASC")

@users_emails = []          
users.each do |user|
    @users_emails += [user.email]
end

CallMailer.call_email(@users_emails, subject, body).deliver

call_mailer.rb

class CallMailer < ActionMailer::Base
    default :from => "noreply@example-foo.com"

    def call_email(users_emails, mesesage_subject, mesesage_body)
        @users_emails = users_emails
        @mesesage_subject = mesesage_subject
        @mesesage_body = mesesage_body
        mail(
            :bcc => @users_emails.join(','),
            :subject => @mesesage_subject,
            :body => @mesesage_body) do |format|
            format.html
        end

    end 
end

1 个答案:

答案 0 :(得分:1)

这有很多不同的选项,但你想看看使用resque等队列系统


资源管理

您遇到的问题是如何在发送所有这些电子邮件时保持您的应用运行。你的代码看起来很好(我只是看了一眼),所以我认为你实现目标的方式就是:

  1. 在服务器上设置resque
  2. 请勿立即发送电子邮件 - 将传递功能移至其他操作
  3. call_email功能中,通过Redis
  4. 将您的电子邮件地址发送给resque
  5. 设置resque以处理电子邮件&amp;将它们传递给电子邮件功能
  6. 这会使负载脱离轨道,并进入Resque系统

  7. 如果需要,我可以使用一些代码进行编辑。我只是想为你提供一个顶级的想法