首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有后台作业的情况下发送大量电子邮件

在没有后台作业的情况下发送大量电子邮件
EN

Stack Overflow用户
提问于 2013-12-21 16:31:05
回答 2查看 1.2K关注 0票数 0

我想从我的Rails应用程序中自动向用户列表发送电子邮件。数量范围从真正的几个用户(5-10)到用户组(50-70)。最大值为所有用户(当前为5000个)。

我知道发送电子邮件可能会阻塞Rails应用程序,所以发送电子邮件应该在排队系统和后台作业的帮助下完成,例如使用DelayedJob,Resque或Sidekiq。

不幸的是,拥有这样的后台作业需要Heroku平台上的工作进程。我想避免这种情况,因为成本增加了(至少在一开始是这样)。

有没有其他我可以采取的方法?例如,第二个Rails应用程序只有一个工作进程,它只处理电子邮件(我猜这也会导致一个付费的工作进程)?

有没有可能在没有这样的工作进程的情况下,通过SendGrid、MailGun或任何其他与Heroku完美集成的服务来发送大量电子邮件?

EN

回答 2

Stack Overflow用户

发布于 2013-12-21 20:20:19

为@phoet的链接提供道具

我们在Heroku上也有类似的想法,我们认为它应该是免费的。原来他们给我们开了scheduler小时的账单。但这是我们所做的:

重排

Resque是一个在Rails上运行的排队系统,用于在Redis中对项目进行排队。它完全推荐给use this on Heroku,并且非常高效和可伸缩

它是这样工作的:

  1. 发送“数据”(通常是ID)到重新排队
  2. 重新排队发送ID到Redis
  3. 重新排队rake作业在处理队列时处理Redis邮件发送您的邮件(将电子邮件发送到Mandrill / SendGrid)

使用队列的原因正如@apneadiving所说-控制器将超时,并且(更重要的),您的Rails应用程序将锁定,直到进程完成

在Resque here上有一个非常好的铁路广播

代码

这只是基本的代码--如果你想的话可以添加更多:

代码语言:javascript
复制
    #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
票数 3
EN

Stack Overflow用户

发布于 2013-12-26 23:20:56

看看这里- https://github.com/stephenb/sendgrid#delivering-to-multiple-recipients

这允许您仅使用一个SMTP调用发送多封电子邮件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20717108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档