【问题标题】:Rails & Mailgun: emails not sendingRails & Mailgun:电子邮件不发送
【发布时间】:2016-10-05 04:49:48
【问题描述】:

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

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 动作有关?

我现在的问题是这两个收件人都在电子邮件中抄送。我希望电子邮件分开并直接发送给每个用户。我该怎么做?

【问题讨论】:

  • 您是否检查过其他电子邮件地址是否未被阻止?如果您碰巧向测试地址发送电子邮件,则被拒绝的地址可能会被 Railgun 阻止。
  • 嗨@Lomefin 看看我的编辑。另一个地址没有被屏蔽。我刚刚确认了这一点。

标签: ruby-on-rails mailgun


【解决方案1】:

/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/"
  }

【讨论】:

  • 嗯.. 是的,我的设置正确,因为我的电子邮件可以正常发送到我的第一个地址
  • 也许您可以将 raise_delivery_errors 设置为 true,而不是设置为 false,这样我们就可以验证 rails 发送第一封电子邮件时是否有任何问题。
【解决方案2】:

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

这意味着等同于 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

【讨论】:

  • 我回来是为了恭维。 mail 方法确实向消息中添加了一些信息,但这不会立即发送,这就是为什么附加信息而不是单独发送的原因。你可以阅读mail method source code
猜你喜欢
  • 1970-01-01
  • 2017-12-23
  • 2022-10-01
  • 1970-01-01
  • 2017-10-12
  • 2018-12-05
  • 1970-01-01
  • 2017-04-30
  • 2016-01-24
相关资源
最近更新 更多