更新 / 再現手順 (Discourse 3.6)
Rails コンソールを使用して明示的な再現を実行し、ジョブ レベルで何が起こっているかを確認しました。影響を受けたユーザーについては、次のことがわかります。
サイト: hvac
現在: 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
– ユーザー –
id: 42122
username: milnerlarry
active: true
suspended: false
email_digests: true
digest_after_minutes: 10080
eligible_by_time: true
– 最後の 15 件のメールログ –
2025-10-01 | type=digest | bounced=false
2025-09-22 | type=digest | bounced=false
perform_deliveries_now: true
次に、ダイジェストを手動で強制ビルドすると、Discourse はビルドしていると考えていますが、次の結果が返されます。
mail = UserNotifications.digest(u)
=> ビルドされたダイジェストメール: subject=nil bytes=50
したがって、Discourse はダイジェストをビルドしていると考えていますが、実際には空 (subject=nil) であり、ジョブが実行されるときにサイレントにスキップされます。EmailLog エントリは作成されず、何も送信されません。
これにより、次のことが確認されます。
- ジョブは正常にエンキューされます
- SMTP と配信が有効になっています
- メーラーが空のダイジェストを返すため、ダイジェスト ジョブはエラーなしで終了します
次の方法でジョブをインラインで実行します。
Jobs::UserEmail.new.execute(“type” => “digest”, “user_id” => u.id”)
新しい EmailLog 行が作成されないという同じ結果が得られます。
考えられる原因:
ダイジェストは「空のダイジェスト」条件によりスキップされているようです。Discourse 3.6 が含めるコンテンツを評価する方法が変更された可能性があります。管理者 → メール → ダイジェスト テストビューはダイジェストを正しくレンダリングしますが、バックグラウンド ジョブには含めるものが何も表示されません。
要約:
対象ユーザー
アクティブなメール + 有効な SMTP
管理者ダイジェスト テストは正しくレンダリングされます
バックグラウンド ダイジェスト ジョブはサイレントにスキップされます (空のダイジェスト)
EmailLog または送信試行は記録されません
チームからの確認をお願いします。UserNotifications.digest が 3.6 でコンテンツを収集する方法にリグレッションがある可能性はありますか?