我遇到了这个post,似乎我可以避免使用延迟的job gem,这是首选的。
申请基础:
问题:在创建/更新故障单时,正在发送电子邮件,但最终将有300多个订阅用户接收电子邮件。我目前有大约15个测试用户,当修改故障单时,每次都会发送15个单独的请求:这在浏览器中非常慢(即,故障修改器可能在创建/更新/关闭后等待10秒以上单击按钮),但可以忍受。随着越来越多的用户订阅,这种缓慢是不可容忍的。
Here是完整的票务控制器,如果您想查看它:我意识到它是相当重复的,并且不遵循DRY原则,并且当然可以重构。
我对如何实施感到困惑(来自上面链接的SO帖子)
headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
因为分类逻辑在控制器中,但app/mailers/user_notifier.rb
是定义电子邮件方法的地方,并不是headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
必须去的地方?
tickets_controller.rb
的第219行位于下方。
def grab_all_sub_emails
@all_users = Subscription.where.not(name: '')
@sub_emails = @all_users.includes(:categories).map { |user| user.slice(:phone_number, :name).merge(categories: user.categories.map(&:name))}
end
我真诚地感谢任何有关如何修改我的逻辑/工具headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
以加快电子邮件处理流程的输入。
答案 0 :(得分:1)
由于您已经在@emails_for_email
标头中设置了UserNotifier
密钥,因此您无需在:to
上进行迭代并在每个网站上调用X-SMTPAPI
。
只需将array_of_recipients
传递给UserNotifier,将其设置为标题:
def ticket_created(array_of_recipients)
...
headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
...
mail
end
SenGrid将读取X-SMTPAPI
标题,阅读:to
密钥并将消息发送给所有收件人。
我可以建议使用sendgrid-ruby gem并将模板存储在SendGrid中吗?