2010-08-04 54 views
3

我發送電子郵件以下方法:從的ActionMailer如何提高/救援提供方法

class Communicate < ActionMailer::Base 
    def message(sub,msg,people) 
    subject sub 
    bcc  people 
    from  '[email protected]' 
    sent_on Time.now 

    body  :greeting => msg 
    end 
end 

BCC包含4個或5個電子郵件地址。

在我的測試中,我注意到兩兩件事:

  • ,如果電子郵件甚至一個不是實際的電子郵件(例如fake_email_no_domain)不發送電子郵件給任何收件人的
  • 如果BCC列表中有一個壞的電子郵件地址(例如[email protected]),那麼它仍然發送電子郵件給其他人,但仍然拋出一個錯誤日誌。

在這兩種情況下所引發的錯誤是:

Redirected to http://localhost:3000/ 
Completed in 2601ms (DB: 1) | 302 Found [http://localhost/notifications] 

    [2010-08-04 00:49:00] ERROR Errno::ECONNRESET: Connection reset by peer 
     /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:56:in `eof?' 
     /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:56:in `run' 
     /usr/local/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 

問題:

  • 有什麼辦法我能趕上這個錯誤?我呈現出flash[:notice]給用戶,我想提一提,一些糟糕的事情發生
  • 如果我的BCC列表中有5封電子郵件和真的只有4電子郵件被髮送,因爲5是不存在的郵件則畢竟是做我能得到一個實際發送電子郵件的數量?我想表明我的flash[:notice]這個數字。我可以通過實際調用輸送方法,一個迭代而不是發送批量但我仍然不想增加計數如果沒有發送一個電子郵件獲得此數目。

回答

2

config/environments/development.rb中添加或取消註釋以下行並重新啓動服務器。

# Don't care if the mailer can't send 
config.action_mailer.raise_delivery_errors = false 

我假設你在config/environments/production.rb

+0

我在development.rb中有該行,但刪除沒有任何效果。仍然會引發同樣的錯誤。 – Patrick 2010-08-04 05:16:44

+0

抱歉,這是我的錯'添加或uncomment'該行不刪除也不要忘記重新啓動服務器。 – Salil 2010-08-04 05:29:11

+0

我已經添加了吧'config.action_mailer.raise_delivery_errors = FALSE'但現在它甚至不拋出錯誤日誌,這是之前扔... – Patrick 2010-08-04 11:41:25

0

檢查的developmentproduction附加線如果我寫這封信發出的電子郵件中控制,我可以像這樣寫來處理營救我的應用程序 我的代碼在控制器中使用類似這樣的東西:

if @user.save 
    begin 
    UserMailer.welcome_email(@user).deliver 
    flash[:success] = "#{@user.name} created" 
    rescue Net::SMTPAuthenticationError, Net::SMTPServerBusy, Net::SMTPSyntaxError, Net::SMTPFatalError, Net::SMTPUnknownError => e 
    flash[:success] = "User #{@user.name} creating Problems sending mail" 
    end 
    redirect_to home_index_path 
end