我想从我的Rails应用程序中自动向用户列表发送电子邮件。数量范围从真正的几个用户(5-10)到用户组(50-70)。最大值为所有用户(当前为5000个)。
我知道发送电子邮件可能会阻塞Rails应用程序,所以发送电子邮件应该在排队系统和后台作业的帮助下完成,例如使用DelayedJob,Resque或Sidekiq。
不幸的是,拥有这样的后台作业需要Heroku平台上的工作进程。我想避免这种情况,因为成本增加了(至少在一开始是这样)。
有没有其他我可以采取的方法?例如,第二个Rails应用程序只有一个工作进程,它只处理电子邮件(我猜这也会导致一个付费的工作进程)?
有没有可能在没有这样的工作进程的情况下,通过SendGrid、MailGun或任何其他与Heroku完美集成的服务来发送大量电子邮件?
发布于 2013-12-21 20:20:19
为@phoet的链接提供道具
我们在Heroku上也有类似的想法,我们认为它应该是免费的。原来他们给我们开了scheduler小时的账单。但这是我们所做的:
重排
Resque是一个在Rails上运行的排队系统,用于在Redis中对项目进行排队。它完全推荐给use this on Heroku,并且非常高效和可伸缩
它是这样工作的:
使用队列的原因正如@apneadiving所说-控制器将超时,并且(更重要的),您的Rails应用程序将锁定,直到进程完成
在Resque here上有一个非常好的铁路广播

代码
这只是基本的代码--如果你想的话可以添加更多:
#app/controllers/messages_controller.rb
def send_message
id = params[:id]
message = Message.find(id).broadcast!
flash[:notice] = "Broadcast Queued!"
redirect_to root_path
end
#app/models/message.rb
def broadcast!
self.subscribers.each do |subscriber|
Resque.enqueue(MailoutQueue, id, subscriber.id, queue.id)
end
end
#app/workers/mailout_queue.rb
class MailoutQueue
@queue = :mailer
def self.perform(message_id, recipient_id, queue_id)
MessageMailer.send_message(message_id, recipient_id).deliver
end
end
class MessageMailer < ActionMailer::Base
default from: '****************'
def send_message(message_id, subscriber_id)
#Declarations
@message = Message.find(message_id)
@subscriber = Subscriber.find(subscriber_id)
#Send
mail(:to => @subscriber.email, :subject => @message.title)
end
end发布于 2013-12-26 23:20:56
看看这里- https://github.com/stephenb/sendgrid#delivering-to-multiple-recipients
这允许您仅使用一个SMTP调用发送多封电子邮件。
https://stackoverflow.com/questions/20717108
复制相似问题