discourse/app/serializers/incoming_email_details_seri...

83 lines
1.6 KiB
Ruby

class IncomingEmailDetailsSerializer < ApplicationSerializer
attributes :error,
:error_description,
:return_path,
:date,
:from,
:to,
:cc,
:message_id,
:references,
:in_reply_to,
:subject,
:body
def initialize(incoming_email, opts)
super
@error_string = incoming_email.error
@mail = Mail.new(incoming_email.raw)
end
EMAIL_RECEIVER_ERROR_PREFIX = "Email::Receiver::".freeze
def error
@error_string
end
def error_description
error_name = @error_string.sub(EMAIL_RECEIVER_ERROR_PREFIX, "").underscore
I18n.t("emails.incoming.errors.#{error_name}")
end
def include_error_description?
@error_string[EMAIL_RECEIVER_ERROR_PREFIX]
end
def return_path
@mail.return_path
end
def date
@mail.date
end
def from
@mail.from.first.downcase
end
def to
@mail.to.map(&:downcase)
end
def cc
@mail.cc.map(&:downcase) if @mail.cc.present?
end
def message_id
@mail.message_id
end
def references
references = Email::Receiver.extract_references(@mail.references)
references.delete(@mail.in_reply_to) if references
references
end
def in_reply_to
@mail.in_reply_to
end
def subject
@mail.subject.presence || "(no subject)"
end
def body
body = @mail.text_part.decoded rescue nil
body ||= @mail.html_part.decoded rescue nil
body ||= @mail.body.decoded rescue nil
body.strip.truncate_words(100, escape: false)
end
end