mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-30 02:32:29 +00:00
chore: Disable throwing error for malformed to address (#10464)
We don't need to raise error on sentry for malformed to address as it is already logged. Fixes: https://linear.app/chatwoot/issue/CW-3151/standarderror-invalid-email-to-address-header-standarderror
This commit is contained in:
@@ -8,12 +8,12 @@ class ApplicationMailbox < ActionMailbox::Base
|
||||
|
||||
# routes as a reply to existing conversations
|
||||
routing(
|
||||
->(inbound_mail) { reply_uuid_mail?(inbound_mail) || in_reply_to_mail?(inbound_mail) } => :reply
|
||||
->(inbound_mail) { valid_to_address?(inbound_mail) && (reply_uuid_mail?(inbound_mail) || in_reply_to_mail?(inbound_mail)) } => :reply
|
||||
)
|
||||
|
||||
# routes as a new conversation in email channel
|
||||
routing(
|
||||
->(inbound_mail) { EmailChannelFinder.new(inbound_mail.mail).perform.present? } => :support
|
||||
->(inbound_mail) { valid_to_address?(inbound_mail) && EmailChannelFinder.new(inbound_mail.mail).perform.present? } => :support
|
||||
)
|
||||
|
||||
# catchall
|
||||
@@ -37,8 +37,6 @@ class ApplicationMailbox < ActionMailbox::Base
|
||||
# checks if follow this pattern send it to reply_mailbox
|
||||
# reply+<conversation-uuid>@<mailer-domain.com>
|
||||
def reply_uuid_mail?(inbound_mail)
|
||||
validate_to_address(inbound_mail)
|
||||
|
||||
inbound_mail.mail.to&.any? do |email|
|
||||
conversation_uuid = email.split('@')[0]
|
||||
conversation_uuid.match?(REPLY_EMAIL_UUID_PATTERN)
|
||||
@@ -48,13 +46,12 @@ class ApplicationMailbox < ActionMailbox::Base
|
||||
# if mail.to returns a string, then it is a malformed `to` header
|
||||
# valid `to` header will be of type Mail::AddressContainer
|
||||
# validate if the to address is of type string
|
||||
def validate_to_address(inbound_mail)
|
||||
def valid_to_address?(inbound_mail)
|
||||
to_address_class = inbound_mail.mail.to&.class
|
||||
|
||||
return if to_address_class == Mail::AddressContainer
|
||||
return true if to_address_class == Mail::AddressContainer
|
||||
|
||||
Rails.logger.error "Email to address header is malformed `#{inbound_mail.mail.to}`"
|
||||
raise StandardError, "Invalid email to address header #{inbound_mail.mail.to}"
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -69,18 +69,26 @@ RSpec.describe ApplicationMailbox do
|
||||
end
|
||||
|
||||
describe 'Invalid Mail To Address' do
|
||||
it 'raises error when mail.to header is malformed' do
|
||||
expect do
|
||||
described_class.route mail_with_invalid_to_address
|
||||
end.to raise_error(StandardError,
|
||||
'Invalid email to address header <vishnu@chatwoot.com>vishnu@chatwoot.com')
|
||||
let(:logger) { double }
|
||||
|
||||
before do
|
||||
allow(Rails).to receive(:logger).and_return(logger)
|
||||
allow(logger).to receive(:error)
|
||||
end
|
||||
|
||||
it 'raises another error when mail.to header is malformed' do
|
||||
it 'will not raise error when mail.to header is malformed format 1' do
|
||||
expect(logger).to receive(:error).with("Email to address header is malformed `#{mail_with_invalid_to_address.mail.to}`")
|
||||
expect do
|
||||
described_class.route mail_with_invalid_to_address
|
||||
end.not_to raise_error
|
||||
end
|
||||
|
||||
it 'will not raise error when mail.to header is malformed format 2' do
|
||||
expect(logger).to receive(:error).with("Email to address header is malformed `#{mail_with_invalid_to_address_2.mail.to}`")
|
||||
|
||||
expect do
|
||||
described_class.route mail_with_invalid_to_address_2
|
||||
end.to raise_error(StandardError,
|
||||
'Invalid email to address header vishnu@chatwoot.com www.chatwoot.com')
|
||||
end.not_to raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user