Improving our unsubscribe functionality

Over the last week I have been thinking a lot about our “mail problem”

The problem is that on certain very active instances of Discourse tons of mails can be generated, which inevitably leads some people to click the “spam” button, and hurt deliverability of all mails from that site.

It is easy to blame this on specific features:

  • We allow people to easily enable mailing list mode which can lead to email floods on mega active sites

  • Watching a very active category is death by a thousand papercuts, first week is easy, but 2 months in you have 500 watched topics and are being flooded with no easy way out.

  • People can enable “email me even when I am online” or participate in a heavily heated private message and flood inboxes

I am working on adding a global rate limit for email so at least there is a limit to the amount of emails we send a user. I am also working on a few features that discourage some of the more common reasons this happens.

However, none of my work is going to attack the root cause.

It is simply too hard to unsubscribe

I saw this tweet from Scott Hanselman today:

The key problem here is I don’t want to spend 1 minute, I want to simply do it all, unconditionally in 2 clicks.

Facebook has faced this issue forever, at the bottom of every email it has the text:

This message was sent to . If you don’t want to receive these emails from Facebook in the future, please unsubscribe.
Facebook, Inc., Attention: Community Support, Menlo Park, CA 94025

The unsubscribe link they generate is usable on a logged out browser

Compare that to our notifications that have:

To stop receiving notifications for this particular topic, click here. To unsubscribe from these emails, change your user preferences

If I click here as a logged out user, I get:

If I click prefs I get:

Given these 2 options, some users will simple go for this button:

Users don’t want to deal with logging on to yet another site. They just want to stop getting the emails. Very often you decide to reach for the “unsubscribe” button a year later, the first 20 digest emails you simply delete, its that 21st one that makes you pause and think, I might as well unsubscribe.

Given that users these days are generally, multi device users (have phones, laptops and desktops) odds of being logged out are quite high. Odds of being on phone where it is a royal pain to log in are also high.

My proposal

###Simplify the unsubscribe text:

Instead of:

To stop receiving notifications for this particular topic, click here. To unsubscribe from these emails, change your user preferences

a simple:

If you don’t want to receive these emails from Site Name in the future, please unsubscribe.

Have the unsubscribe link be unique per email


Have emails parser be careful to anonymise these links.

Have these links have a shelf life (only work for say 1 month configurable by site setting)

Simplify the unsubscribe page

When you click on the unsubscribe link present with something like this (depending on context)

Opt out of email notifications:

Stop watching “This awesome topic”
Stop watching “Bugs” category and 72 topics in the “Bugs” category
Stop sending me emails from

For mailing list enabled

Opt out of email notifications:

Disable mailing list mode
Stop sending me emails from

For digest

Opt out of email notifications:

Stop sending me weekly digests
Stop sending me emails from

This makes it trivial to “get off the train” and eliminates the reason people reach for the spam button. There is too much friction now.


In addition the use of the List-Unsubscribe mail header should be sent - see RFC2369.

I know it exists currently and links to “my preferences” but it should be updated, additionally this has some additional desirable effects in both and Gmail properties.

If this is available Gmail adds an additional “Unsubscribe” link in most cases (uses Google-foo to decide when to display it):

Original Google post announcing this feature:

Unsubscribe can also be found on Gmail on mobile:

According to this article, using a “mailto” link for List-Unsubscribe is preferable to a HTTP link - it’s worth a read:


It’s great to see you paying attention to this. It also relates to this topic about telling people why they received a given notification.


I actually think your suggestion has more merit than what @sam is proposing… if people have no idea why they are getting an email that is super mega bad.

I actually disagree, I don’t care “why” I am getting an email, I just want the emails to stop.

The unsubscribe general purpose screen can let people know why they are getting the email and how to stop it.

Eg: stop all watching on a category, stop notifying me when I am on the site, stop notifying me when I am mentioned, stop sending me digests… and so on.


Nah, this is wrong, if people don’t understand they are getting an email because another human being is talking directly to them we have failed utterly in our mission and it is time to fold the company and try our hands at something else.

That said, there is a big difference between “talking directly to you” and “accidentally watched a topic or category”. But are we making that difference clear?

1 Like

I am fine with:

“You are receiving this email because you were mentioned, unsubscribe”
“You are receiving this email because you have mailing list mode enabled, unsubscribe”
“You are receiving this email because its a digest and you asked to be emailed about digests unsubscribe”

As long as there is a single “unsubscribe” link that always works regardless of me being logged in or not, and does not force me to work through a “forgot password” sequence on my mobile device just to stop the pain… I am fine.


Discourse send a lot of e-mail with default settings.

We tweaked the wait time to 6 hours, and digest disable to 60 days (from 180).

Maybe this can help some communities.

I think the default disable for digest is more like a year, isn’t it? Yep, default weekly (you must not visit for a week to get it) and 365 days (you will get it for one year max).

So someone who signs up and walks away forever will get 12 X 4 = 48 digest emails from any Discourse site.

(Caveat: the site must have TL1 user activity to generate a digest… sites with no activity in a week or only new user activity in that week, will not have enough content to generate a digest for that week.)

As someone who receives many digests due to working for a company that hosts many of them, I find unsubscribing too difficult. In particular, I might have more than one account on a site for testing purposes, and if I am logged into one I cannot unsubscribe from another.

I am a big fan of allowing people to unsubscribe from content if they have the unique key like sam proposed. I also really support explaining why they received the email, and giving them more options (remove me from category, etc.)


I like this too, but the problem to overcome is what to do about forwards? I don’t know how often it really happens in the wild, but even with mailchimp newsletters if I click on the unsubscribe button I am removing someone else from a mailing list. I’ve tested it.

Maybe the answer is to send a confirmation email with another unique key in it to the just unsubscribed email address, along with a message like “sorry to see you go. You will not hear from us again. If this was not you or you changed your mind, click here.”

Another thought: this may not be necessary. If we use the mailto unsubscribe link explained above by @DeanMarkTaylor, then discourse can match the unique key and the from email address. If it doesn’t match, it sends a reply to the person indicating as such. If it does match, it sends a confirmation email that the unsubscribe request worked.

I have another option. Some websites (I cannot think of a specific one off the top of my head) require you to enter your email into a website to complete the unsubscribe process. Not a login, just confirming your email. While this isn’t foolproof against forwarding, it can catch some, particularly if the message was forwarded more than once, and it isn’t known who initially received it.


I don’t especially like those, from the subscriber perspective. If I suspect it is spam I see it as another opportunity to phish for my email address. Really, like @sam says above, I just want to unsubscribe and be done with it.


Nor do I, but it is an “option” so I wanted to throw it out there…

I’ve been doing a fair amount of cleanup the last month or two, taking care to actually unsubscribe from stuff that I don’t want (but in some sense signed up for). In that process I’ve unsubscribed from probably 30-40 sites recently. All but one of them had an “unsubscribe” link that worked without login - the exception was one that required a login I no longer had, and actually generated an angry mail to their support. Of the rest, about two thirds required a button push and then gave the “unsubscribed; sorry to see you go” page. The last third just unsubscribed me directly and without further prompts. None required typing in an email address (apart from the one exception I mentioned).

I mention this as a data point for best practices. Do have an unsubscribe link. Don’t require login. Don’t require typing in an email. Don’t worry about forwarded digests.


I agree with @calmh

Worrying about forwarded unsubscribe links is an imagineered problem that does not even happen at facebook scale.

I can imagineer solutions for it if needed:

  • check that the IP of the person trying to unsubscribe matches the locations they previously logged in from, if not send a confirm

  • if happens within N minutes from sending the link, send a confirm

But before building complex pyramids here, lets confirm this is a real problem. Aka have say 10 examples in the wild of a malicious “forward unsubscribe”

My gut tells me that since this not a problem for facebook or hundreds of thousands of sites that just let you plug in a random email and unsubscribe it with no confirm… its probably not going to be a problem here.


This is great!

I like the context idea - offer options based on what email the user clicks unsubscribe on, but always offer the option to completely opt out. It makes the landing page much simpler and essentially asking the user one simple question.

Next step: make the UX really simple, like how Mailchimp did it.
Good read: The ‘Unsubscribe’ experience needs to be improved - Simple = Human - Medium

1 Like

Well to be fair I was the one complaining about theoretically forwarded digests that someone else unsubscribes you from.

Based on the data presented here I am convinced, a one click digest unsubscribe is the safer and easier route that everyone else does … so I support it.


one more data point… mailchimp provides one last email when you click unsubscribe via the link at the bottom of a mailing. Discourse should, methinks, do the same.


There’s a strong argument that requiring users to log in to unsubscribe is illegal.

1 Like