4

我正在使用以下方法发送电子邮件:

class Communicate < ActionMailer::Base
  def message(sub,msg,people)
    subject    sub
    bcc        people
    from       'my_email.s@gmail.com'
    sent_on    Time.now

    body       :greeting => msg
  end
end

bcc 包含 4 或 5 个电子邮件地址。

在我的测试中,我注意到了两件事:

  • 即使其中一封电子邮件不是实际的电子邮件(例如fake_email_no_domain),它也不会向任何收件人发送电子邮件
  • 如果密件抄送列表的电子邮件地址不正确(例如nonexistent@gmail.com),它仍会向其他收件人发送电子邮件,但仍会向日志中抛出错误。

在这两种情况下,引发的错误是:

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]向用户展示一个,我想提一下发生了一些不好的事情
  • 如果我的密件抄送列表有 5 封电子邮件,但实际上只发送了 4 封电子邮件,因为第 5 封电子邮件不存在,那么在完成之后,我可以得到实际发送的电子邮件数量吗?我想在我的flash[:notice]. 我可以通过在迭代中实际调用传递方法而不是批量发送来获得这个数字,但如果没有发送一封电子邮件,我仍然不想增加计数。
4

2 回答 2

2

在 中添加或取消注释以下行config/environments/development.rb 并重新启动服务器。

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

我假设您检查developmentfor productionadd 行config/environments/production.rb

于 2010-08-04T05:12:23.407 回答
0

如果我正在编写代码以在控制器中发送电子邮件,我可以像这样编写来处理我的应用程序中的救援,我在控制器中使用这样的东西:

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
于 2017-09-05T13:02:58.717 回答