2013-02-21 43 views
1

我對ActionMailer有一個奇怪的問題。它發送一些郵件,但不是其他郵件。我們最近升級到了3.2.12,那是麻煩發生的時候。ActionMailer渲染視圖不發送郵件

這裏是我的配置:

# 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 

該郵件不起作用並提出沒有錯誤ORS:

模型:

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 protected] (193ms) 

緊隨視圖渲染,而我沒有得到的是,在情況下,我看到了失敗。

我已啓用傳遞錯誤,並且沒有收到任何錯誤。我們的應用程序沒有改變,我們的配置沒有改變。我們唯一做的事情就是升級到rails 3.2.12,第二個郵件程序已經開始失敗。

回答

2

仍然不確定爲什麼一個人在工作,另一種是沒有,但我可以通過移動.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 
+1

謝謝你!這讓我意識到我錯過了郵件的發送呼叫,這是不起作用的。難以置信的! – Patrick 2013-12-11 05:21:51