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