diff --git a/app/controllers/admin/email_controller.rb b/app/controllers/admin/email_controller.rb index 74ce0901ec1..df43323926c 100644 --- a/app/controllers/admin/email_controller.rb +++ b/app/controllers/admin/email_controller.rb @@ -84,8 +84,8 @@ class Admin::EmailController < Admin::AdminController def handle_mail params.require(:email) - Email::Processor.process!(params[:email]) - render plain: "email was processed" + Jobs.enqueue(:process_email, mail: params[:email], retry_on_rate_limit: true) + render plain: "email has been received and is queued for processing" end def raw_email diff --git a/app/jobs/regular/process_email.rb b/app/jobs/regular/process_email.rb index a01e3bc07d1..81acb4f8af7 100644 --- a/app/jobs/regular/process_email.rb +++ b/app/jobs/regular/process_email.rb @@ -4,7 +4,7 @@ module Jobs sidekiq_options retry: 3 def execute(args) - Email::Processor.process!(args[:mail], false) + Email::Processor.process!(args[:mail], args[:retry_on_rate_limit] || false) end sidekiq_retries_exhausted do |msg| diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index 2322970bae1..b629fdb5587 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -553,7 +553,7 @@ module Email def create_post_with_attachments(options={}) # deal with attachments attachments.each do |attachment| - tmp = Tempfile.new("discourse-email-attachment") + tmp = Tempfile.new(["discourse-email-attachment", File.extname(attachment.filename)]) begin # read attachment File.open(tmp.path, "w+b") { |f| f.write attachment.body.decoded } diff --git a/spec/controllers/admin/email_controller_spec.rb b/spec/controllers/admin/email_controller_spec.rb index 86d2b42e9a0..b14b6ae9792 100644 --- a/spec/controllers/admin/email_controller_spec.rb +++ b/spec/controllers/admin/email_controller_spec.rb @@ -71,4 +71,16 @@ describe Admin::EmailController do end end + context '#handle_mail' do + before do + log_in_user(Fabricate(:admin)) + SiteSetting.queue_jobs = true + end + + it 'should enqueue the right job' do + expect { xhr :post, :handle_mail, email: email('cc') } + .to change { Jobs::ProcessEmail.jobs.count }.by(1) + end + end + end diff --git a/spec/controllers/email_controller_spec.rb b/spec/controllers/email_controller_spec.rb index 63fd6865adc..996d88cf3e4 100644 --- a/spec/controllers/email_controller_spec.rb +++ b/spec/controllers/email_controller_spec.rb @@ -232,6 +232,4 @@ describe EmailController do end end - - end