diff --git a/app/jobs/scheduled/clean_up_email_logs.rb b/app/jobs/scheduled/clean_up_email_logs.rb new file mode 100644 index 00000000000..122546289d9 --- /dev/null +++ b/app/jobs/scheduled/clean_up_email_logs.rb @@ -0,0 +1,18 @@ +module Jobs + + class CleanUpEmailLogs < Jobs::Scheduled + every 1.day + + def execute(args) + return if SiteSetting.suppress_email_logs_after_days <= 0 + + threshold = SiteSetting.suppress_email_logs_after_days.days.ago + + EmailLog.where(reply_key: nil) + .where("created_at < ?", threshold) + .destroy_all + end + + end + +end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index b626685bed3..8de10a64f0c 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1116,6 +1116,8 @@ en: unsubscribe_via_email: "Allow users to unsubscribe from emails by sending an email with 'unsubscribe' in the subject or body" unsubscribe_via_email_footer: "Attach an unsubscribe link to the footer of sent emails" + suppress_email_logs_after_days: "Delete email logs after (N) days. 0 to keep indefinitely" + pop3_polling_enabled: "Poll via POP3 for email replies." pop3_polling_ssl: "Use SSL while connecting to the POP3 server. (Recommended)" pop3_polling_period_mins: "The period in minutes between checking the POP3 account for email. NOTE: requires restart." diff --git a/config/site_settings.yml b/config/site_settings.yml index 668bd3a8bde..24853e3961e 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -539,6 +539,9 @@ email: default: true unsubscribe_via_email_footer: default: false + suppress_email_logs_after_days: + default: 365 + min: 0 files: max_image_size_kb: 3072 diff --git a/spec/jobs/clean_up_email_logs_spec.rb b/spec/jobs/clean_up_email_logs_spec.rb new file mode 100644 index 00000000000..4edf0f7caea --- /dev/null +++ b/spec/jobs/clean_up_email_logs_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +describe Jobs::CleanUpEmailLogs do + + before do + Fabricate(:email_log, created_at: 2.years.ago, reply_key: "something") + Fabricate(:email_log, created_at: 2.years.ago) + Fabricate(:email_log, created_at: 2.weeks.ago) + Fabricate(:email_log, created_at: 2.days.ago) + end + + it "removes old email logs without a reply_key" do + Jobs::CleanUpEmailLogs.new.execute({}) + expect(EmailLog.count).to eq(3) + end + + it "does not remove old email logs when suppress_email_logs_after_days is 0" do + SiteSetting.suppress_email_logs_after_days = 0 + Jobs::CleanUpEmailLogs.new.execute({}) + expect(EmailLog.count).to eq(4) + end + +end