2

我正在尝试向大量人发送电子邮件。
我之前对下面的这段代码没问题。

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

这曾经可以很好地向所有用户发送电子邮件,然后它确实可以正常工作。
现在,即使在垃圾邮件箱中,我也找不到任何消息。

我从来没有改变过我的代码。唯一不同的是与以前相比的用户数量。我认为它运行良好,直到周围有大约 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
4

1 回答 1

1

有很多不同的选择,但你想看看使用队列系统,比如resque


资源管理

您遇到的问题是如何在发送所有这些电子邮件的同时保持您的应用程序运行。你的代码看起来不错(我只是看了一眼),所以我认为你可以实现目标的方法是这样做:

  1. 在你的服务器上设置 resque
  2. 不要立即发送电子邮件——将发送功能移至不同的操作
  3. 在您的call_email函数中,将您的电子邮件地址发送到 resque viaRedis
  4. 设置 resque 以处理电子邮件并将它们传递给电子邮件功能
  5. 这将负载从轨道上移开,并放到 Resque 系统上

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

于 2013-11-11T09:57:30.877 回答