mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-29 18:22:53 +00:00
fix: Email attachments created with empty filename (#10420)
- We observed in prod for certain emails active storage blob objects were getting created with empty file name. The conversations further causes conversation and filter pages to break. This change will fix the mentioned issue. fixes: https://linear.app/chatwoot/issue/CW-3331/missing-file-name-for-some-of-the-uploads-for-emails --------- Co-authored-by: Pranav <pranavrajs@gmail.com>
This commit is contained in:
@@ -77,7 +77,7 @@ class MailPresenter < SimpleDelegator
|
||||
mail.attachments.map do |attachment|
|
||||
blob = ActiveStorage::Blob.create_and_upload!(
|
||||
io: StringIO.new(attachment.body.to_s),
|
||||
filename: attachment.filename,
|
||||
filename: attachment.filename.presence || "attachment_#{SecureRandom.hex(4)}",
|
||||
content_type: attachment.content_type
|
||||
)
|
||||
{ original: attachment, blob: blob }
|
||||
|
||||
43
spec/fixtures/files/attachments_without_filename.eml
vendored
Normal file
43
spec/fixtures/files/attachments_without_filename.eml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
From: test@gmail.com
|
||||
Date: Thu, 4 May 2023 10:35:52 +0530
|
||||
Message-ID: <6215d536e0484_10bc6191402183@tejaswinis-MacBook-Pro.local.mail>
|
||||
Subject: multiple attachments
|
||||
To: test@outlook.com
|
||||
Content-Type: multipart/mixed; boundary="0000000000002488f405fad721cc"
|
||||
|
||||
--0000000000002488f405fad721cc
|
||||
Content-Type: multipart/alternative; boundary="0000000000002488f205fad721ca"
|
||||
|
||||
--0000000000002488f205fad721ca
|
||||
Content-Type: text/plain; charset="UTF-8"
|
||||
Content-Transfer-Encoding: quoted-printable
|
||||
Hi people!
|
||||
|
||||
We are excited to inform you that we have recently released some new
|
||||
features and several updates to our platform. These features and updates
|
||||
are designed to enhance your experience and make your trading journey
|
||||
seamless and efficient.
|
||||
|
||||
|
||||
|
||||
> Okay noted
|
||||
|
||||
|
||||
--0000000000002488f205fad721ca--
|
||||
--0000000000002488f405fad721cc
|
||||
Content-Type: image/png; name=""
|
||||
Content-Disposition: attachment; filename=""
|
||||
Content-Transfer-Encoding: base64
|
||||
Content-ID: <f_lh8nwk8l3>
|
||||
X-Attachment-Id: f_lh8nwk8l3
|
||||
|
||||
|
||||
--0000000000002488f405fad721cc
|
||||
Content-Type: image/png; name=""
|
||||
Content-Disposition: attachment; filename=""
|
||||
Content-Transfer-Encoding: base64
|
||||
Content-ID: <f_lh8nwk8l2>
|
||||
X-Attachment-Id: f_lh8nwk8l2
|
||||
|
||||
|
||||
--0000000000002488f405fad721cc--
|
||||
@@ -43,6 +43,22 @@ RSpec.describe Imap::ImapMailbox do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the email has attachments with no filename' do
|
||||
let(:inbound_mail) { create_inbound_email_from_fixture('attachments_without_filename.eml') }
|
||||
|
||||
it 'creates a conversation and a message with properly named attachments' do
|
||||
expect do
|
||||
class_instance.process(inbound_mail.mail, channel)
|
||||
end.to change(Conversation, :count).by(1)
|
||||
|
||||
last_message = conversation.messages.last
|
||||
expect(last_message.attachments.count).to be 2
|
||||
|
||||
filenames = last_message.attachments.map(&:file).map { |file| file.blob.filename.to_s }
|
||||
expect(filenames.all? { |filename| filename.present? && filename.start_with?('attachment_') }).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the email has 15 or more attachments' do
|
||||
let(:inbound_mail) { create_inbound_email_from_fixture('multiple_attachments.eml') }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user