2017-02-21 38 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

相關問題