как поднять / спасти из ActionMailer метод доставки - PullRequest
3 голосов
/ 04 августа 2010

Я отправляю электронные письма следующим способом:

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

Скрытая копия содержит 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], и я хотел бы отметить, что случилось что-то плохое
  • Если в моем списке BCC есть 5 электронных писем, и на самом деле отправлено только 4 электронных письма, потому что 5-е было несуществующим, тогда, в конце концов,готово, могу ли я узнать количество отправленных электронных писем?Я хотел бы показать это число в моем flash[:notice].Я могу получить этот номер, фактически вызывая метод доставки в итерации, а не отправляя его как массовую, но все же я не хотел бы увеличивать счет, если одно письмо не отправлено.

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

Добавьте или раскомментируйте следующую строку в config/environments/development.rb и перезапустите сервер.

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

Я предполагаю, что вы проверяете development для production строки добавления в config/environments/production.rb

0 голосов
/ 05 сентября 2017

Если я пишу код для отправки электронного письма в контроллере, я могу написать так, чтобы справиться со спасением в моем приложении, я использую что-то вроде этого в контроллере:

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
...