diff --git a/app/jobs/scheduled/enqueue_digest_emails.rb b/app/jobs/scheduled/enqueue_digest_emails.rb index 9fc56699807..e763d89fe7a 100644 --- a/app/jobs/scheduled/enqueue_digest_emails.rb +++ b/app/jobs/scheduled/enqueue_digest_emails.rb @@ -16,8 +16,8 @@ module Jobs .where(email_digests: true, active: true) .not_suspended .where("COALESCE(last_emailed_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * digest_after_days)") - .where("(COALESCE(last_seen_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * digest_after_days)) OR - email_always") + .where("(COALESCE(last_seen_at, '2010-01-01') <= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * digest_after_days)) AND + COALESCE(last_seen_at, '2010-01-01') >= CURRENT_TIMESTAMP - ('1 DAY'::INTERVAL * #{SiteSetting.suppress_digest_email_after_days})") # If the site requires approval, make sure the user is approved if SiteSetting.must_approve_users? diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 1136c092a1a..9afec94c4a2 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -990,6 +990,7 @@ en: digest_topics: "The maximum number of topics to display in the email digest." digest_min_excerpt_length: "Minimum post excerpt in the email digest, in characters." default_digest_email_frequency: "How often users receive digest emails by default. They can change this setting in their preferences." + suppress_digest_email_after_days: "Suppress digest emails for users not seen on the site for more than (n) days." default_external_links_in_new_tab: "Open external links in a new tab. Users can change this in their preferences." detect_custom_avatars: "Whether or not to check that users have uploaded custom avatars." diff --git a/config/site_settings.yml b/config/site_settings.yml index 0b644cdc382..9d1dba6c55f 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -408,6 +408,7 @@ email: default_digest_email_frequency: default: 7 enum: 'DigestEmailSiteSetting' + suppress_digest_email_after_days: 365 email_custom_headers: 'Auto-Submitted: auto-generated' email_subject: '[%{site_name}] %{optional_pm}%{optional_cat}%{topic_title}' reply_by_email_enabled: false diff --git a/spec/jobs/enqueue_digest_emails_spec.rb b/spec/jobs/enqueue_digest_emails_spec.rb index 2929548d76a..baaf300809f 100644 --- a/spec/jobs/enqueue_digest_emails_spec.rb +++ b/spec/jobs/enqueue_digest_emails_spec.rb @@ -65,15 +65,18 @@ describe Jobs::EnqueueDigestEmails do user = user_visited_this_week expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id)).to eq(false) end + end - it "does return users who have been emailed recently but have email_always set" do - user = user_visited_this_week_email_always - expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id)).to eq(true) + context 'visited the site a year ago' do + let!(:user_visited_a_year_ago) { Fabricate(:active_user, last_seen_at: 370.days.ago) } + + it "doesn't return the user who have not visited the site for more than 365 days" do + expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user_visited_a_year_ago.id)).to eq(false) end end context 'regular users' do - let!(:user) { Fabricate(:active_user) } + let!(:user) { Fabricate(:active_user, last_seen_at: 360.days.ago) } it "returns the user" do expect(Jobs::EnqueueDigestEmails.new.target_user_ids).to eq([user.id]) @@ -99,4 +102,3 @@ describe Jobs::EnqueueDigestEmails do end -