Allowing posts by new users in summary emails

Discourse tries very hard to ship with safe defaults, that is, defaults that ensure nothing bad will happen, even if you set up Discourse and walk away from it forever. With that in mind, we added this setting early on:

Don’t allow posts by TL0 users in summary emails

… and it is checked by default.

Remember, summary emails are sent out every week to all users who haven’t been seen on the site for the last week, for up to a year (but no longer, if you are gone for 3 years we don’t keep mailing you because that’d be insane).

We originally added this setting to prevent:

  • angry new user rants
  • crazy nonsensical new user posts
  • unhandled new user spam
  • low value new user posts

… from getting emailed in the summary to potentially thousands of users. The idea is that we trust TL1 users a hell of a lot more than new users, which is true and valid.

But! This hurts some sites, particularly when they are starting out, because they have mostly new users, not a lot of new TL1+ user posts, and so their emailed summaries are … weak. Too weak. So, how can we more safely show new user posts in summaries and do away with this site setting? Some ideas:

  • Filter by “post existed for at least 24 hours”?

  • Filter by “post has at least one like?”

  • (your idea here)


With some JOIN queries some arbitrary minimums could be used

posts and badge_posts have both word_count and raw

Not perfect by any means, but closer than using cooked
length(raw) AS raw_length

post_stats has typing_duration_msecs

As a rough measure of word diversity (minus one for the Category title)
(length(search_data) -1) AS lexemes

Not flagged as Off-topic, Inappropriate or Spam
post_action_type_id NOT IN(3, 4, 8)

* Using the posts table would need WHEREs to filter out archetype private_message, and restricted categories.

I think posts from TL0 that got likes from [Staff, TL4, TL3, TL2, TL1] should be included, in that order.

Using meta as example, a post on #praise by a TL0 that got several likes by the staff is a great candidate for the digest.


How about ignoring this setting in bootstrap mode?

I think that one’s solid and very understandable. To expand upon “post existed”, I assume that also means if post has been flagged enough times by the community or by TL3 users to get hidden, that also counts as “not existing”, yes?

And it should apply to all posts anyhow, so there’s no need to add an extra option for it. When a TL1/TL2/TL3 user gets their post flagged within 24 hours, the rules should be no different.


@neil I support whatever is easiest here, if enforcing one like on the tl0 post is easiest do that, if it is easier to check 24 hours existence of the tl0 post do that.


I guess I never replied here… :blush: The solution we went with is: If we find no topics from TL1 and higher users for the digest email, look for posts from TL0 users that were posted at least 24 hours ago. Those posts need to have the same minimum score (from likes, views, etc.) as if they were from TL1 users.