BigW Consortium Gitlab

email_receiver_worker.rb 2.14 KB
Newer Older
Douwe Maan committed
1 2
class EmailReceiverWorker
  include Sidekiq::Worker
3
  include DedicatedSidekiqQueue
Douwe Maan committed
4 5

  def perform(raw)
6
    return unless Gitlab::IncomingEmail.enabled?
Douwe Maan committed
7

8
    begin
9
      Gitlab::Email::Receiver.new(raw).execute
10 11 12
    rescue => e
      handle_failure(raw, e)
    end
Douwe Maan committed
13 14 15 16 17 18
  end

  private

  def handle_failure(raw, e)
    Rails.logger.warn("Email can not be processed: #{e}\n\n#{raw}")
19

20 21
    return unless raw.present?

22
    can_retry = false
23 24 25
    reason =
      case e
      when Gitlab::Email::UnknownIncomingEmail
26
        "We couldn't figure out what the email is for. Please create your issue or comment through the web interface."
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
      when Gitlab::Email::SentNotificationNotFoundError
        "We couldn't figure out what the email is in reply to. Please create your comment through the web interface."
      when Gitlab::Email::ProjectNotFound
        "We couldn't find the project. Please check if there's any typo."
      when Gitlab::Email::EmptyEmailError
        can_retry = true
        "It appears that the email is blank. Make sure your reply is at the top of the email, we can't process inline replies."
      when Gitlab::Email::AutoGeneratedEmailError
        "The email was marked as 'auto generated', which we can't accept. Please create your comment through the web interface."
      when Gitlab::Email::UserNotFoundError
        "We couldn't figure out what user corresponds to the email. Please create your comment through the web interface."
      when Gitlab::Email::UserBlockedError
        "Your account has been blocked. If you believe this is in error, contact a staff member."
      when Gitlab::Email::UserNotAuthorizedError
        "You are not allowed to perform this action. If you believe this is in error, contact a staff member."
      when Gitlab::Email::NoteableNotFoundError
        "The thread you are replying to no longer exists, perhaps it was deleted? If you believe this is in error, contact a staff member."
      when Gitlab::Email::InvalidNoteError,
           Gitlab::Email::InvalidIssueError
        can_retry = true
        e.message
      end

    if reason
      EmailRejectionMailer.rejection(reason, raw, can_retry).deliver_later
52
    end
Douwe Maan committed
53 54
  end
end