60 lines
1.4 KiB
Ruby
60 lines
1.4 KiB
Ruby
class EmailChannelFinder
|
|
include EmailHelper
|
|
|
|
def initialize(email_object)
|
|
@email_object = email_object
|
|
end
|
|
|
|
def perform
|
|
channel_from_primary_recipients || channel_from_bcc_recipients
|
|
end
|
|
|
|
private
|
|
|
|
def channel_from_primary_recipients
|
|
primary_recipient_emails.each do |email|
|
|
channel = channel_from_email(email)
|
|
return channel if channel.present?
|
|
end
|
|
|
|
nil
|
|
end
|
|
|
|
def channel_from_bcc_recipients
|
|
bcc_recipient_emails.each do |email|
|
|
channel = channel_from_email(email)
|
|
|
|
# Skip if BCC processing is disabled for this account
|
|
next if channel && !allow_bcc_processing?(channel.account_id)
|
|
|
|
return channel if channel.present?
|
|
end
|
|
|
|
nil
|
|
end
|
|
|
|
def primary_recipient_emails
|
|
(@email_object.to.to_a + @email_object.cc.to_a + [@email_object['X-Original-To'].try(:value)]).flatten.compact
|
|
end
|
|
|
|
def bcc_recipient_emails
|
|
@email_object.bcc.to_a.flatten.compact
|
|
end
|
|
|
|
def channel_from_email(email)
|
|
normalized_email = normalize_email_with_plus_addressing(email)
|
|
Channel::Email.find_by('lower(email) = ? OR lower(forward_to_email) = ?', normalized_email, normalized_email)
|
|
end
|
|
|
|
def bcc_processing_skipped_accounts
|
|
config_value = GlobalConfigService.load('SKIP_INCOMING_BCC_PROCESSING', '')
|
|
return [] if config_value.blank?
|
|
|
|
config_value.split(',').map(&:to_i)
|
|
end
|
|
|
|
def allow_bcc_processing?(account_id)
|
|
bcc_processing_skipped_accounts.exclude?(account_id)
|
|
end
|
|
end
|