---
title: "Offer one-click unsubscribe · Agent Wranglers"
url: https://agentwranglers.se/playbook/email/unsubscribe/one-click-unsubscribe
id: EML-27
level: Required
applies: email
risk: outage
updated: 2026-10-27
build: a2a6bdfed830
tokens: 1007
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Offer one-click unsubscribe

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Unsubscribe](https://agentwranglers.se/playbook/email/unsubscribe.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: EML-27
- Level: Required
- Chapter: [Unsubscribe](https://agentwranglers.se/playbook/email/unsubscribe.md)
- Rule: Add `List-Unsubscribe` and `List-Unsubscribe-Post` headers to every marketing or list message, so mail apps can unsubscribe in one click.
- Check: Send `curl -X POST -d 'List-Unsubscribe=One-Click'` to the link from a test message. It answers 200 without a redirect, and the next send skips the address. A plain GET leaves the address subscribed. The `DKIM-Signature` header's `h=` lists `List-Unsubscribe` and `List-Unsubscribe-Post`.
- Risk: The app down or unusable
- Applies when: The project sends email.
- How: Gmail and Yahoo delay or reject marketing mail without them from a bulk sender, as [Meet the bulk sender rules](https://agentwranglers.se/playbook/email/deliverability/bulk-sender-rules.md) sets out. Put exactly one HTTPS link in `List-Unsubscribe` (RFC 2369), optionally next to a `mailto:` address. Add `List-Unsubscribe-Post: List-Unsubscribe=One-Click` (RFC 8058). Put an opaque token in the link that names the recipient and the list. A POST to the link unsubscribes at once, with no cookies, login or redirect. A GET shows a page with a button, because mail scanners follow links on their own. List both headers in the `h=` tag of your DKIM signature. Act on each request as [Unsubscribe within two days](https://agentwranglers.se/playbook/email/unsubscribe/honour-unsubscribes.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### Plain text example

```text
List-Unsubscribe: <https://news.example.com/unsubscribe?t=8f2c4a>, <mailto:unsubscribe@news.example.com?subject=8f2c4a>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
```

### JavaScript example

```js
app.get('/unsubscribe', (req, res) => res.send(confirmPage(req.query.t)));
app.post('/unsubscribe', express.urlencoded({ extended: false }), async (req, res) => {
  await suppressByToken(req.query.t);
  res.status(200).send('You are unsubscribed.');
});
```

### Python example

```python
@app.get("/unsubscribe")
def unsubscribe_page():
    return confirm_page(request.args["t"])

@app.post("/unsubscribe")
def unsubscribe():
    suppress_by_token(request.args["t"])
    return "You are unsubscribed.", 200
```

## Sources

- [RFC 8058, One-Click Functionality for List Email Headers](https://www.rfc-editor.org/rfc/rfc8058)
- [RFC 2369, URLs for Mailing List Commands](https://www.rfc-editor.org/rfc/rfc2369)

## Related rules

- EML-18 [Meet the bulk sender rules](https://agentwranglers.se/playbook/email/deliverability/bulk-sender-rules.md) in Email
- EML-28 [Unsubscribe within two days](https://agentwranglers.se/playbook/email/unsubscribe/honour-unsubscribes.md) in Email
- EML-35 [Label list mail](https://agentwranglers.se/playbook/email/unsubscribe/list-id.md) in Email
- CMP-12 [Weigh every legitimate interest in writing](https://agentwranglers.se/playbook/compliance/records-and-data-map/legitimate-interests-assessment.md) in Compliance and governance

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/email/unsubscribe/one-click-unsubscribe">Agent Wranglers email playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Unsubscribe within two days](https://agentwranglers.se/playbook/email/unsubscribe/honour-unsubscribes.md)
- [Unsubscribe](https://agentwranglers.se/playbook/email/unsubscribe.md)
