Rails& Mailgun:电子邮件未发送

时间:2016-10-05 04:49:48

标签: ruby-on-rails mailgun

我有一个发送电子邮件通知的应用。有些用户提到他们没有收到通知。

NotificationMailer.rb:

  def send_daily_digest(user_id)
      @user = User.find(user_id)
      mail(to: @user.email, subject: "#{@jobs.count} new jobs yesterday")
      mail(to: "myadminemail@gmail.com", subject: "TEST #{@jobs.count} new jobs yesterday for #{@user.email}")
  end

我的电子邮件是myadminemail@gmail.com,我收到了电子邮件。我检查了Mailgun日志,而另一封(非管理员)电子邮件没有被发送。

导致这种情况的原因是什么?

编辑:我刚做了以下更改:

def send_daily_digest(user_id)
          @user = User.find(user_id)
          @recipients = []
          @recipients << @user.email
          @recipients << myadminemail@gmail.com
          mail(to: @recipients, subject: "#{@jobs.count} new jobs yesterday")
      end

正确地进行更改会将电子邮件发送给两个收件人。所以也许它与不被允许有两个单独的mail_to动作有关?

我现在的问题是这两位收件人都是电子邮件的CC。我希望电子邮件是独立的,并指向每个用户。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

/config/environments/development.rb

 config.action_mailer.raise_delivery_errors = false
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :authentication => :plain,
      :address => "smtp.mailgun.org",
      :port => 587,
      :domain => "you domain  in https://mailgun.com/app/",
      :user_name => "you user_name in https://mailgun.com/app/",
      :password => "you password in https://mailgun.com/app/"
  }

答案 1 :(得分:0)

根据Rails Docs about ActionMailer,邮件方法是创建邮件并呈现电子邮件模板的主要方法。

这意味着等同于ActionController#render所以它可能只是将邮件发送给mail方法调用的最后一个收件人。

所以也许你应该做的是将交付逻辑移动到控制邮件程序的对象。

例如,我将这些对象称为调度程序。

class ClientDispatcher
  def self.dispatch_digests
    Clients.all.each do |client|
      DigestMailer.send_daily_digest(client).deliver_later
      DigestMailer.send_daily_digest("admin@gmail.com").deliver_later
    end
  end
end