1

ActionMailerで奇妙な問題が発生しています。一部のメールを送信していますが、他のメールは送信していません。最近3.2.12にアップグレードしましたが、それが問題の始まりです。

これが私の設定です:

# Disable delivery errors, bad email addresses will be ignored
config.action_mailer.raise_delivery_errors = true
# config.action_mailer.perform_deliveries = false
config.action_mailer.default_url_options = { :host => "ruby.ourdomain.com/app" }
config.action_mailer.asset_host = "http://ruby.ourdomain.com/app"
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address                => "pop.ourdomain.com"
}

このメーラーは機能します:

モデル内:

def alertStudent
  AbsenceMailer.StudentAbsenceAlert(self).deliver
end

メーラー:

def StudentAbsenceAlert(alert)
  @alert = alert
  @student = studentInfo(@alert.student_id)
  @advisor = staffInfo(@alert.advisor)
  @instructor = @alert.polling.instructor
  studentAddr = @student['STUDENT_EMAIL']

  mail to: studentAddr, cc: @advisor['STAFF_EMAIL'], from: @advisor['STAFF_EMAIL'], subject: "[#{@alert.polling.course}] You have been marked absent #{Time.now.strftime('%m-%e-%Y')}"
end

このメーラーは機能せず、エラーは発生しません。

モデル:

def self.advisorDigest
  AbsenceAlert.current_status('active').advisor_day.group_by{|r| r.advisor }.each do |id, alerts|
    AbsenceMailer.AdvisorAbsenceDigest(id, alerts).deliver
  end
end

メーラー:

def AdvisorAbsenceDigest(id, alerts)
  @alerts = alerts
  @staff = staffInfo(id)
  mail to: @staff['STAFF_EMAIL'], subject: "Student Absence Report #{Time.now.strftime('%m-%e-%Y')}"
  puts "[#{Time.now.strftime('%c')}] Sent Advisor Digest: #{alerts.count} alerts to #{@staff['STAFF_EMAIL']}"
end

ログには次のように表示されます

 Rendered absence_mailer/AdvisorAbsenceDigest.html.haml within layouts/app (31.6ms)

ただし、実際にはメールを送信しません。

通話を成功させるには、通常、

Sent mail to email@ourdomain.com (193ms)

ビューレンダリングの直後ですが、失敗が発生した場合は表示されません。

配信エラーを有効にしましたが、エラーは発生しません。私たちのアプリは変更されていません、私たちの設定は変更されていません。私たちが行ったのは、Rails 3.2.12にアップグレードすることだけで、2番目のメーラーは失敗し始めました。

4

1 に答える 1

2

1つが機能し、もう1つが機能しなかった理由はまだわかりませんが.deliver、モデルからメーラー自体に移動することで、次のように問題を修正できました。

モデル:

def self.advisorDigest
  AbsenceAlert.current_status('active').advisor_day.group_by{|r| r.advisor }.each do |id, alerts|
    AbsenceMailer.AdvisorAbsenceDigest(id, alerts)
  end
end

メーラー:

def AdvisorAbsenceDigest(id, alerts)
  @alerts = alerts
  @staff = staffInfo(id)
  mail(to: @staff['STAFF_EMAIL'], subject: "Student Absence Report #{Time.now.strftime('%m-%e-%Y')}").deliver
  puts "[#{Time.now.strftime('%c')}] Sent Advisor Digest: #{alerts.count} alerts to #{@staff['STAFF_EMAIL']}"
end
于 2013-02-21T20:38:19.337 に答える