2017-02-21 57 views
0

我正在使用rails 5.如何使用延迟作业每分钟发送邮件给5个用户

我想从我的rails应用程序向100个用户发送电子邮件。

我已添加delayed_job gem以异步发送电子邮件。

以下是代码:

控制器:

UserMailer.delay.send_mail(email, subject, body) 

梅勒:

def send_mail(email, subject, body) 
    mail(to: email, subject: subject, body: body, content_type: "text/html") 
end 

问:我需要知道,如何发送邮件到每分钟5用户?

问:如果我使用delayed_job向100个用户发送邮件,则在delayed_job表中有100个作业。我可以批量发送邮件吗?

+0

你可以在'UserMailer.send_mail'调用周围添加更多来自控制器的代码吗?你有一个循环,或者它只被称为一次?如果您在调用'send_mail'之前拥有所有电子邮件,那么解决方案应该非常简单。另一方面,如果您需要以某种方式逐一收集电子邮件,然后分批发送,那需要采用完全不同的方法。 – Teoulas

+0

获取所有用户,运行循环并发送邮件。 – puneet18

+0

如何每分钟发送邮件给5个用户? – puneet18

回答

2

假设你想发送相同的主题和身体给每个收件人,我会使用find_in_batchesrun_at参数。

# UserMailer 
def send_email_batch(emails, subject, body) 
    emails.each do |email| 
    send_email(email, subject, body) 
    end 
end 

# Controller 
now = Time.current 
User.find_in_batches(batch_size: 5).with_index do |users, batch| 
    UserMailer.delay(run_at: now + batch * 60).send_email_batch(users.map(&:email), subject, body) 
end 
+0

如何使用Active Record Job功能添加电子邮件在队列下,然后运行它? – puneet18

+0

你有没有试过编写一个ActiveJob子类?真的没有太多事要做。你只需要将'UserMailer.send_email_batch'调用从控制器移动到Job类的'perform'方法。只需按照这里的指南:http://guides.rubyonrails.org/active_job_basics.html#creating-a-job – Teoulas

+0

好的会尝试。谢谢你的帮助。 – puneet18

相关问题