Просмотр исходного кода

Closes #4727 - Do not store oversized emails any more

Martin Gruner 1 год назад
Родитель
Сommit
3cbccb54fd
3 измененных файлов с 9 добавлено и 24 удалено
  1. 2 5
      app/models/channel/email_parser.rb
  2. 4 18
      spec/models/channel/driver/imap_spec.rb
  3. 3 1
      var/README.md

+ 2 - 5
app/models/channel/email_parser.rb

@@ -13,7 +13,6 @@ class Channel::EmailParser
   MESSAGE_STRUCT = Struct.new(:from_display_name, :subject, :msg_size).freeze
   MESSAGE_STRUCT = Struct.new(:from_display_name, :subject, :msg_size).freeze
 
 
   UNPROCESSABLE_MAIL_DIRECTORY = Rails.root.join('var/spool/unprocessable_mail')
   UNPROCESSABLE_MAIL_DIRECTORY = Rails.root.join('var/spool/unprocessable_mail')
-  OVERSIZED_MAIL_DIRECTORY = Rails.root.join('var/spool/oversized_mail')
 
 
 =begin
 =begin
 
 
@@ -520,14 +519,12 @@ process unprocessable_mails (var/spool/unprocessable_mail/*.eml) again
 
 
 =begin
 =begin
 
 
-  process oversized emails by:
-  1. Archiving the oversized mail as tmp/oversized_mail/md5.eml
-  2. Reply with a postmaster message to inform the sender
+  process oversized emails by
+  - Reply with a postmaster message to inform the sender
 
 
 =end
 =end
 
 
   def process_oversized_mail(channel, msg)
   def process_oversized_mail(channel, msg)
-    archive_mail(OVERSIZED_MAIL_DIRECTORY, msg)
     postmaster_response(channel, msg)
     postmaster_response(channel, msg)
   end
   end
 
 

+ 4 - 18
spec/models/channel/driver/imap_spec.rb

@@ -287,10 +287,6 @@ RSpec.describe Channel::Driver::Imap, integration: true, required_envs: %w[MAIL_
       end
       end
       let(:oversized_email_md5) { Digest::MD5.hexdigest(oversized_email) }
       let(:oversized_email_md5) { Digest::MD5.hexdigest(oversized_email) }
       let(:oversized_email_size) { format('%<MB>.2f', MB: oversized_email.size.to_f / 1024 / 1024) }
       let(:oversized_email_size) { format('%<MB>.2f', MB: oversized_email.size.to_f / 1024 / 1024) }
-      let(:oversized_eml_folder) { Rails.root.join('var/spool/oversized_mail') }
-      let(:oversized_eml_file) do
-        Dir.entries(oversized_eml_folder).grep(%r{^#{oversized_email_md5}\.eml$}).map { |path| oversized_eml_folder.join(path) }.last
-      end
 
 
       let(:fetch_oversized_email) do
       let(:fetch_oversized_email) do
         imap.append(folder, oversized_email, [], Time.zone.now)
         imap.append(folder, oversized_email, [], Time.zone.now)
@@ -320,14 +316,7 @@ RSpec.describe Channel::Driver::Imap, integration: true, required_envs: %w[MAIL_
         end
         end
 
 
         it 'creates email reply correctly' do
         it 'creates email reply correctly' do
-          # 1. verify that the oversized email has been saved locally to:
-          # var/spool/oversized_mail/yyyy-mm-ddThh:mm:ss-:md5.eml
-          expect(oversized_eml_file).to be_present
-
-          # verify that the file is byte for byte identical to the sent message
-          expect(File.read(oversized_eml_file)).to eq(oversized_email)
-
-          # 2. verify that a postmaster response email has been sent to the sender
+          # verify that a postmaster response email has been sent to the sender
           expect(oversized_email_reply).to be_present
           expect(oversized_email_reply).to be_present
 
 
           # parse the reply mail and verify the various headers
           # parse the reply mail and verify the various headers
@@ -343,7 +332,7 @@ RSpec.describe Channel::Driver::Imap, integration: true, required_envs: %w[MAIL_
           # verify the reply mail body content
           # verify the reply mail body content
           expect(parsed_oversized_email_reply[:body]).to match(%r{^Dear Max Mustermann.*Oversized Email Message.*#{oversized_email_size} MB.*0.1 MB.*#{Setting.get('fqdn')}}sm)
           expect(parsed_oversized_email_reply[:body]).to match(%r{^Dear Max Mustermann.*Oversized Email Message.*#{oversized_email_size} MB.*0.1 MB.*#{Setting.get('fqdn')}}sm)
 
 
-          # 3. check if original mail got removed
+          # check if original mail got removed
           imap.select(folder)
           imap.select(folder)
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII')).to be_empty
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII')).to be_empty
         end
         end
@@ -358,15 +347,12 @@ RSpec.describe Channel::Driver::Imap, integration: true, required_envs: %w[MAIL_
 
 
         it 'does not create email reply' do
         it 'does not create email reply' do
 
 
-          # 1. verify that email was not locally processed
-          expect(oversized_eml_file).to be_nil
-
-          # 2. verify that no postmaster response email has been sent
+          # verify that no postmaster response email has been sent
           imap.select('inbox')
           imap.select('inbox')
           sleep 1
           sleep 1
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII').count).to be_zero
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII').count).to be_zero
 
 
-          # 3. check that original mail is still there
+          # check that original mail is still there
           imap.select(folder)
           imap.select(folder)
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII').count).to be(1)
           expect(imap.sort(['DATE'], ['ALL'], 'US-ASCII').count).to be(1)
         end
         end

+ 3 - 1
var/README.md

@@ -3,4 +3,6 @@ and must be shared in cluster setups to be available for all nodes.
 
 
 Possible subfolders (depending on system configuration and usage):
 Possible subfolders (depending on system configuration and usage):
 - `var/spool/unprocessable_mail` - stores emails that could not properly be imported
 - `var/spool/unprocessable_mail` - stores emails that could not properly be imported
-- `var/spool/oversized_mail` - stores emails that were rejected as too big
+
+Just for reference, Zammad 6.1 and earlier did also store here:
+- `var/spool/oversized_mail` - emails that were rejected as too big