From 96b6e7ce669cf412f931e700fafc99d6d7ef031a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 25 Sep 2018 16:26:53 -0700 Subject: Extract and associate message_id with newly created inbound emails --- .../action_mailroom/inbound_emails_controller.rb | 2 +- app/models/action_mailroom/inbound_email.rb | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/controllers/action_mailroom/inbound_emails_controller.rb b/app/controllers/action_mailroom/inbound_emails_controller.rb index e5970b38ec..2aa2a89323 100644 --- a/app/controllers/action_mailroom/inbound_emails_controller.rb +++ b/app/controllers/action_mailroom/inbound_emails_controller.rb @@ -4,7 +4,7 @@ class ActionMailroom::InboundEmailsController < ActionController::Base before_action :require_rfc822_message def create - ActionMailroom::InboundEmail.create!(raw_email: params[:message]) + ActionMailroom::InboundEmail.create_from_raw_email!(params[:message]) head :created end diff --git a/app/models/action_mailroom/inbound_email.rb b/app/models/action_mailroom/inbound_email.rb index 8526b47e78..790e0ccc4f 100644 --- a/app/models/action_mailroom/inbound_email.rb +++ b/app/models/action_mailroom/inbound_email.rb @@ -9,7 +9,22 @@ class ActionMailroom::InboundEmail < ActiveRecord::Base has_one_attached :raw_email enum status: %i[ pending processing delivered failed bounced ] + class << self + def create_from_raw_email!(raw_email, **options) + create! raw_email: raw_email, message_id: extract_message_id(raw_email), **options + end + + def mail_from_raw_content(raw_email_content) + Mail.new(Mail::Utilities.binary_unsafe_to_crlf(raw_email_content.to_s)) + end + + private + def extract_message_id(raw_email) + mail_from_raw_content(raw_email.read).message_id + end + end + def mail - @mail ||= Mail.new(Mail::Utilities.binary_unsafe_to_crlf(raw_email.download)) + @mail ||= self.class.mail_from_raw_content(raw_email.download) end end -- cgit v1.2.3