Rails 如何给所有用户发个邮件呢?单发可以,群发失败。

babodx · 2013年05月07日 · 最后由 babodx 回复于 2013年05月07日 · 4026 次阅读

我想写个程序给所有用户发个邮件。 开始测试了下邮件发送。

#encoding: utf-8
class UserMailer < ActionMailer::Base
  default from: "[email protected]"

  def test_email
    mail(:to => "[email protected]", :subject => "rails邮件发送测试")
  end

然后 rails c 里面直接 UserMailer.test_email.deliver 测试 ok。可以收到邮件

然后打算遍历 User 表发送

def send_all
   User.all.each do |u|
     @user = u
     mail(:to => @user.mail, :subject => "rails程序测试")
   end

 end

目前为了测试,就 2 个用户。但是这样再调用 send_all.deliver 结果就最后用户可以收到,前面的用户就收不到了。不知道什么原因

因为单位打算用来作为成绩通知用,就 100 多用户,单位自己的邮件服务器。所以不存在垃圾邮件问题。难道不能这样循环发送吗?我想的是如果这样可以,再加上 delay_job 就可以后台延时发送了。

你一次就可以To多个啊...

恩,问题解决了。 将 email address 作为一个 array 传递给:to 是可以,但是邮件内容就都相同了。

参考了http://stackoverflow.com/questions/5023585/rails-3-mail-to-users

在 Mailer 外面循环,每次代码里调用 UserMailer.send_mail(user).deliver 这样每次生成一个新的 Mailer 就可以发给不同用户了。

默认一个 Mailer 里面循环,只是更新邮件地址,最后只会向最后一次更新的用户发出邮件。

不知道我这样理解对不对。

我是直接在 rails c 里面测试通过的

irb(main):005:0> User.all.each do |u|
irb(main):006:1* UserMailer.test_email(u).deliver
irb(main):007:1> end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号