我不仅是Rails的新手,而是一般的开发人员,所以如果这是一个基本问题我会道歉。我有一个应用程序,我想向选择加入的用户发送大量电子邮件(即简报)。我有两个问题:(1)我的代码是处理群发邮件的最有效方式(即我需要使用for ...每个语句)和(2)我阅读Stack Overflow上关于重要性的其他帖子邮件服务器和使用延迟作业发送电子邮件。
其他注意事项:
我的问题是:
谢谢!
控制器
commmunity_users = UserCommunityRelation.find('community_id = ? and status = ?,' current_community, "approved" )
@opt_in_users = User.find('opt_in = ?,' true)
@opt_in_users.each do |opt_in_user|
UserMailer.send_later(:deliver_announcement, opt_in_user)
end
UserMailer.rb
def announcement(opt_in_user)
mail(:to => "#{opt_in_user.username} <#{opt_in_user.email}>", :subject => "Huge Announcement!")
end
答案 0 :(得分:2)
对于批量发送,你一定要通过服务发送它(我们使用邮箱,SendGrid是另一种选择)。除了服务器上的负载之外,服务还可能更适合跳出,垃圾邮件拦截器等,它可能会提供额外的好处,例如跟踪。
即使是单个收件人电子邮件(即用户注册确认),大多数人都会使用延迟的工作吗?
对于单用户电子邮件,我会在控制器中使用直接电子邮件。
我的代码是最有效的群发电子邮件方式吗?
您不希望控制器操作管理排队任务,因为它会影响您的网站响应能力。使用cron作业和rake任务在后台执行。
例如,如果有1000个用户。如果我向每个人发送带有BCC的相同电子邮件,它是否会对资源(即带宽,CPU等)产生很大影响。如果是这样,我是否只是将哈希值传递给邮件程序(即删除for ... each并将opt_in_user参数更改为@opt_in_users)并将收件人更改为密件抄送?
我认为BCC在资源使用方面很好,但是你的服务器会受到任何反弹的影响,而且这是一项额外的管理服务,因此,我会选择前面提到的服务
顺便说一句,对于#each vs for ...每个问题,迭代器的成本将会非常低,以至于不值得考虑IMO。