diff --git a/app/jobs/base.rb b/app/jobs/base.rb index cd0e35e74e0..055bd7dfd81 100644 --- a/app/jobs/base.rb +++ b/app/jobs/base.rb @@ -173,10 +173,9 @@ module Jobs if exceptions.length > 0 exceptions.each do |exception_hash| - Discourse.handle_job_exception(exception_hash[:ex], - error_context(opts, exception_hash[:code], exception_hash[:other])) + Discourse.handle_job_exception(exception_hash[:ex], error_context(opts, exception_hash[:code], exception_hash[:other])) end - raise HandledExceptionWrapper.new exceptions[0][:ex] + raise HandledExceptionWrapper.new(exceptions[0][:ex]) end nil diff --git a/app/jobs/regular/user_email.rb b/app/jobs/regular/user_email.rb index 8a109d233de..10bdac0477e 100644 --- a/app/jobs/regular/user_email.rb +++ b/app/jobs/regular/user_email.rb @@ -150,6 +150,22 @@ module Jobs [message, nil] end + sidekiq_retry_in do |count, exception| + # retry in an hour when SMTP server is busy + # or use default sidekiq retry formula + case exception.wrapped + when Net::SMTPServerBusy + 1.hour + (rand(30) * (count + 1)) + else + Jobs::UserEmail.seconds_to_delay(count) + end + end + + # extracted from sidekiq + def self.seconds_to_delay(count) + (count ** 4) + 15 + (rand(30) * (count + 1)) + end + private def skip_message(reason) diff --git a/lib/email/sender.rb b/lib/email/sender.rb index e1d0b320b00..a83d012e1e5 100644 --- a/lib/email/sender.rb +++ b/lib/email/sender.rb @@ -135,8 +135,8 @@ module Email # Suppress images from short emails if SiteSetting.strip_images_from_short_emails && - @message.html_part.body.to_s.bytesize <= SiteSetting.short_email_length && - @message.html_part.body =~ /]+>/ + @message.html_part.body.to_s.bytesize <= SiteSetting.short_email_length && + @message.html_part.body =~ /]+>/ style = Email::Styles.new(@message.html_part.body.to_s) @message.html_part.body = style.strip_avatars_and_emojis end