Update / Repro Steps (Discourse 3.6)
I ran an explicit repro for this using the Rails console to confirm what’s happening at the job level. Here’s what we see for the affected user:
site: hvac
now: 2025-10-15 17:23:01 UTC
disable_emails: “no”
disable_digest_emails: false
default_email_digest_frequency_minutes: 10080
ENV_DISABLE_EMAILS: nil
perform_deliveries: nil
smtp_address: “smtp.netcorecloud.net”
smtp_port: 587
– USER –
id: 42122
username: XXXXXXXXXX
active: true
suspended: false
email_digests: true
digest_after_minutes: 10080
eligible_by_time: true
– LAST 15 EMAIL LOGS –
2025-10-01 | type=digest | bounced=false
2025-09-22 | type=digest | bounced=false
perform_deliveries_now: true
Then when I force-built the digest manually, Discourse thinks it’s building it but returns:
mail = UserNotifications.digest(u)
=> Built digest mail: subject=nil bytes=50
So Discourse thinks it’s building the digest, but it’s actually empty (subject=nil) — and thus silently skipped when the job runs. No EmailLog entry gets created, and nothing is sent.
This confirms:
-
The job enqueues successfully
-
SMTP and deliveries are enabled
-
The digest job exits without error because the mailer returns a blank digest
Running the job inline with:
Jobs::UserEmail.new.execute(“type” => “digest”, “user_id” => u.id”)
produces the same result — no new EmailLog row created.
Possible Cause:
It seems the digest is being skipped due to an “empty digest” condition — maybe something changed in how Discourse 3.6 evaluates content for inclusion. The Admin → Emails → Digest Test view renders the digest correctly, but the background job sees nothing to include.
Summary:
Eligible user
Active email + valid SMTP
Admin Digest Test renders properly
Background digest job silently skips (empty digest)
No EmailLog or send attempt recorded
Would love confirmation from the team — is there possibly a regression in how UserNotifications.digest collects content in 3.6?