如果有一个用户,以下代码似乎可以工作,但会为多个用户截断电子邮件:
users.each do |user|
mail(
:to => user.email,
:subject => 'Hi',
:template_name => 'notification'
).deliver
这是发送几封电子邮件的正确方法吗?
- Ruby on Rails 3.2.2
- Heroku
- 发送网格
如果有一个用户,以下代码似乎可以工作,但会为多个用户截断电子邮件:
users.each do |user|
mail(
:to => user.email,
:subject => 'Hi',
:template_name => 'notification'
).deliver
这是发送几封电子邮件的正确方法吗?
I think this is what you're looking for:
def my_mailer_method
users = User.find({ ... })
headers['X-SMTPAPI'] = { :to => users.to_a }.to_json
mail(
:to => "this.will@be.ignored.com",
:subject => "Hi",
:template_name => "notification"
).deliver
end
This sends a message to any number of recipients use the SendGrid's SMTP API. You can find further information on the docs page.
You might also want to take a look at the sendgrid rails gem
如果对彼此隐藏电子邮件地址并不重要,您可以在逗号分隔的字符串中指定收件人。
似乎问题在于Mailer的每个实例只能发送一封电子邮件。也许邮件对象超出范围并被垃圾收集器清理......
有效的解决方案是在 Mailer 之外迭代用户,并为每个用户调用一次。它可能很慢,但无论如何它应该在后台发生,所以没关系。