The two headers, and why both are needed

One-click unsubscribe is not a single header. It is two, and a message carrying only the first does not qualify.

List-Unsubscribe carries the unsubscribe destination. It is the older of the two, defined in RFC 2369 back in 1998, and it accepts one or more URIs in angle brackets: historically a mailto: address, and since RFC 8058 at least one HTTPS URL. To comply with RFC 8058 the header must contain at least one HTTPS URI. A mailto: may be listed alongside it, and several senders list both so that older clients still have something to act on.

List-Unsubscribe-Post is the signal that the HTTPS URL will accept a one-click POST. Its value is always the same literal string, List-Unsubscribe=One-Click. There are no other valid values, and the header carries no other information. Its only job is to tell the mailbox provider that the endpoint on the other end is safe to POST to without asking the recipient anything further.

What the message carries

List-Unsubscribe: <https://example.com/u/9f3a2c>, <mailto:unsub@example.com?subject=9f3a2c>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

What the mailbox provider sends

When the recipient presses the native unsubscribe button, the provider issues an HTTPS POST to the URL from the first header, with the same literal string as the request body:

POST /u/9f3a2c HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 26

List-Unsubscribe=One-Click

That is the whole exchange. No landing page, no login, no preference center. The recipient leaves the list in a single action, where a footer link requires them to click through and then find their way through whatever page is waiting on the other side. The endpoint should return a success response and treat the request as final: the provider will not send the recipient anywhere to confirm it.

What RFC 8058 actually specifies

RFC 8058, "Signaling One-Click Functionality for List Email Headers", was published in January 2017. That is worth stating plainly, because the standard is routinely described as a response to the Google and Yahoo bulk sender rules. It predates them by seven years. What changed in 2024 was not the specification but its enforcement.

The specification is short, and its substantive requirements are these:

  • The List-Unsubscribe header must contain at least one HTTPS URI.
  • The message must also carry List-Unsubscribe-Post: List-Unsubscribe=One-Click.
  • The URI must accept an HTTP POST, and the POST must complete the unsubscribe without any further interaction from the recipient.
  • The URI should be unique per recipient and hard to guess, since it is the only credential the request carries.
  • The endpoint must not require the recipient to be logged in, and must not answer with a confirmation step.

Why POST rather than GET

The POST requirement is the part most guides state without explaining, and it is the part worth understanding, because the reasoning generalizes well beyond unsubscribes.

Security gateways and link scanners follow the links in a message to check them for malware and phishing. That is their job, and the check happens before the recipient ever sees the message. A GET-based unsubscribe URL is an ordinary link as far as that infrastructure is concerned, so it gets fetched, and fetching it performs the unsubscribe. The recipient never asked for anything and never even opened the message, and they are off the list.

Requiring a POST closes that path. An automated fetch that follows links cannot complete a POST with the right body by accident, so the scanner checks the URL and moves on without triggering the action behind it.

Security vendors do make an effort to recognize unsubscribe and opt-in links and leave them alone. They get it wrong regularly, and in practice both link types are clicked by automated systems every day. That is the failure RFC 8058's POST requirement exists to defend against, and it is a concrete illustration of why Non-Human Interactions are an operational problem rather than only a reporting one. An inflated click rate is a bad number. An automated unsubscribe is a lost recipient.

Opt-in confirmation links need the same protection, and do not get it

RFC 8058 protects the unsubscribe end of the subscription lifecycle by requiring a POST. Nothing protects the other end.

Double opt-in confirmation links are almost always plain GET URLs. The recipient receives a "confirm your subscription" message, clicks the link, and the click records the consent. The same scanning infrastructure that would follow a GET-based unsubscribe URL follows that confirmation URL too, for exactly the same reason, and confirms a subscription nobody asked for.

The consequences are worse than a false unsubscribe, because a false unsubscribe loses you a recipient while a false confirmation gives you a record that says something untrue:

  • A confirmed subscription that nobody confirmed. The recipient never completed the opt-in. Your database now says they did, with a timestamp.
  • A consent record that will not survive scrutiny. Under the GDPR the burden of proving consent sits with the controller. A confirmation timestamp generated by a security scanner is not evidence of consent, and it cannot be defended if it is ever challenged.
  • List quality damage. Addresses enter the active list without any intent behind them. They depress engagement and raise complaint rates, which are precisely the metrics mailbox providers assess you on.

The fix: a confirmation link must not confirm on load

The link in the confirmation message should open a page, and that page should require a deliberate action before the opt-in is recorded. A checkbox and a submit button, a CAPTCHA and a confirm button, or any equivalent interaction that an automated fetch cannot complete.

Stated as a rule: a GET request should render a confirmation page, and only a subsequent POST from that page should record the consent. It is the same principle RFC 8058 applies to unsubscribes, applied to the opposite end of the lifecycle. Log what the POST tells you, including the timestamp and the request details, and you have a consent record that means something.

The full treatment of the confirmation side, including what to log and which defenses do not work, is in the double opt-in guide. Opt-in and opt-out are the same problem seen from two ends: RFC 8058 protects one of them and nothing protects the other.

The asymmetry is worth saying out loud. The standards body mandated protection for opting out, and nothing comparable exists for opting in, even though the compliance exposure on the opt-in side is larger.

What Google, Yahoo and Microsoft require

All three now require an unsubscribe mechanism from bulk senders, and all three are frequently reported as requiring the same thing. They do not. The differences are small, but they decide whether a given implementation passes.

Who the rules apply to

Google's guidelines cover senders of more than 5,000 messages per day to personal Gmail accounts. Mail to Google Workspace accounts is not counted toward that threshold and is governed separately, which is a qualifier that matters for B2B programs: a sender whose list is mostly corporate Workspace addresses may sit under the threshold on Google's count while looking well over it on their own.

Microsoft's requirements apply to senders of more than 5,000 messages per day to its consumer domains, outlook.com, hotmail.com and live.com. Yahoo publishes no numeric threshold and states its requirements for bulk senders generally.

What each one actually says

Google is the hardest of the three. Its sender guidelines state that marketing messages and subscribed messages must support one-click unsubscribe and include a clearly visible unsubscribe link in the message body, and its subscription guidelines require senders to process and honor unsubscribe requests within 48 hours. The implementation deadline for one-click unsubscribe was 1 June 2024.

Yahoo is worded more loosely than it is usually reported. Its sender FAQ says senders must implement the list-unsubscribe header, "preferably according to RFC 8058", and its best practices page describes the POST method as "highly recommended" rather than mandatory. Yahoo is specific about timing: unsubscribes must be honored within two days, and an unsubscribe not honored within two days does not meet the requirement.

Microsoft is the least prescriptive. Its requirements for high-volume senders, announced in April 2025 and enforced from 5 May 2025, mandate SPF, DKIM and DMARC, along with a functional and clearly visible way to opt out. One-click unsubscribe under RFC 8058 is supported and recommended, not mandated, so a sender who fails RFC 8058 alone is not thereby non-compliant with Microsoft.

The common flattening of all this into "Google, Yahoo and Microsoft all require RFC 8058" is wrong in two directions at once. Yahoo and Microsoft both stop short of mandating it, and Google mandates one-click unsubscribe rather than the RFC by name, though in practice the two headers are how you satisfy Google.

What happens to non-compliant mail

Enforcement has tightened steadily. Microsoft began rejecting mail that fails its authentication requirements at the SMTP level in May 2025, returning 550 5.7.515 rather than routing to the junk folder as originally announced. Google moved from filtering to rejection during November 2025, escalating from temporary failures to permanent ones for traffic that does not meet the requirements. The practical shift is that a non-compliant message is no longer a message in the spam folder. It is a message that was never delivered.

The other thresholds in the same rules

One-click unsubscribe arrived as part of a package, and the rest of the package is authentication and complaint rate: SPF and DKIM on the sending domain, DMARC at a minimum of p=none with alignment to one of them, and a spam complaint rate below 0.30% as reported in Google Postmaster Tools. Treat 0.10% as the number to manage against rather than 0.30%, which is the point at which delivery is already suffering. Those are covered properly on the deliverability page rather than here.

Transactional mail is exempt

Order confirmations, password resets, one-time passwords and shipping notifications are outside the unsubscribe requirements at all three providers. Google draws the line at messages sent for legal reasons or in response to an explicit action by the user; Yahoo states the requirement applies to promotional and marketing messages and not to transactional ones. That exemption is not a loophole to route marketing through, and the next section covers why you should take it seriously in the other direction as well.

Side by side

Google, Yahoo and Microsoft compared

The three sets of requirements overlap but do not match. Where a provider does not publish a figure, this table says so rather than borrowing one from another provider.

GoogleYahooMicrosoft
Applies toMore than 5,000 messages per day to personal Gmail accountsBulk senders; no numeric threshold publishedMore than 5,000 messages per day to outlook.com, hotmail.com and live.com
Google Workspace / business mailboxes countedNo - personal Gmail accounts onlyNot specifiedNo - consumer domains only
One-click unsubscribeRequired for marketing and subscribed messagesRequired; RFC 8058 POST method "highly recommended"Supported and recommended, not mandated
RFC 8058 named as mandatoryNo - one-click unsubscribe is mandated, RFC 8058 is how you implement itNo - "preferably according to RFC 8058"No
Visible unsubscribe link in the message bodyRequiredRequiredRequired
Deadline to honor a request48 hours2 daysNot specified
Transactional mailExemptExemptExempt
SPF and DKIMBoth requiredBoth requiredBoth required
DMARCRequired, p=none minimum, aligned with SPF or DKIMRequired, p=none minimumRequired, p=none minimum, aligned with SPF or DKIM
Published spam rate ceilingBelow 0.30% in Postmaster ToolsBelow 0.30%No numeric threshold published
In force since1 June 2024 for one-click unsubscribeJune 20245 May 2025

Sources: Google, "Email sender guidelines" and "Email subscription guidelines for senders"; Yahoo Sender Hub best practices and sender FAQ; Microsoft, "Strengthening Email Ecosystem: Outlook's New Requirements for High-Volume Senders", April 2025. Checked September 2026. All three providers revise these pages, so confirm against the current version before relying on a specific figure.

Why transactional email should never carry List-Unsubscribe

Every provider exempts transactional mail from the unsubscribe requirement. Most guides stop there, as though the exemption were merely permission to skip some work. It is stronger than that: adding the header to transactional mail is an error, not an optional extra.

There is nothing to unsubscribe from. A password reset, a one-time passcode or a fraud alert is not a subscription. Offering the recipient a way out of it is incoherent, and honoring such a request could lock someone out of their own account. An unsubscribe control that you cannot act on is worse than no control at all, because the recipient reasonably expects it to do something.

It confuses the categorization your sending is judged on. Mailbox providers assess streams, not individual messages. Marketing headers on transactional mail push that traffic toward the bulk classification, which is assessed against complaint rates and engagement patterns that transactional mail was never going to produce. The stream that most needs to reach the inbox ends up measured by the wrong yardstick.

The right header for transactional mail is List-Help. It points the recipient at support rather than at an opt-out, which is the thing they actually want when a receipt looks wrong or a reset code has not arrived. It carries the same "this sender is well configured" signal without claiming the message is a subscription.

Omnivery sets List-Unsubscribe automatically on marketing messages and never on transactional messages, where it sets List-Help instead. The categorization is applied by the platform rather than left to the sending system to get right, which is deliberate: the mistake is easy to make in application code and invisible until a filtering decision surfaces it months later.

Common implementation mistakes

Almost every failure here is partial compliance rather than none. The sender believes the requirement is met, the header is present, and something one layer down does not work. In order of how often they turn up:

  • A footer link and no headers. The header method is what the requirement asks for. A visible unsubscribe link in the message body is also required, but it does not satisfy the header requirement on its own.
  • List-Unsubscribe present, List-Unsubscribe-Post missing. The most common near-miss. Without the second header the provider has no signal that the URL is safe to POST to, so no native one-click button appears and the sender fails the requirement while looking compliant in their own message source.
  • A mailto: URI with no HTTPS URI. Valid under the older RFC 2369, and not enough for RFC 8058. The HTTPS URI is what one-click runs on.
  • An endpoint that accepts GET but not POST. Usually a route defined for a browser click and never extended. The provider's POST returns a 404 or a 405, and the unsubscribe silently does not happen.
  • An endpoint behind authentication or a confirmation step. A login wall, a cookie check, an "are you sure?" page, or a CSRF token requirement will each defeat one-click. The POST arrives from the mailbox provider's infrastructure with no session and no prior request.
  • Unsubscribes recorded but not honored in time. Writing the request to a table is not processing it. Google gives 48 hours and Yahoo two days, and a suppression list that is applied on the next campaign build rather than on the next send can easily exceed both.
  • Headers applied to transactional mail. Covered above, and usually the result of a shared sending template rather than a decision anyone made.
  • A shared or guessable unsubscribe URL. The URI is the only credential the POST carries. A sequential identifier lets anyone unsubscribe anyone.

The check that catches most of these takes a minute: send yourself a message, open the raw source, confirm both headers are present with an HTTPS URI, then POST to that URL from the command line with the body List-Unsubscribe=One-Click and confirm the address is actually suppressed on the next send.

In practice

How Omnivery handles this

Header handling is applied by the platform rather than left to the sending system, so a campaign leaving an older tool still meets the current requirements. The full headers table, including every option below, is in the sending documentation.

  • List-Unsubscribe and List-Unsubscribe-Post are set automatically on marketing messages, per RFC 8058, whether or not the platform above Omnivery emits them.
  • If a customer supplies their own List-Unsubscribe at submission, Omnivery substitutes its own unsubscribe URL and redirects to the supplied URL on GET requests. Unsubscribes are always honored in Omnivery's own suppression state, and the customer's existing unsubscribe flow is preserved.
  • List-Help is set on transactional messages instead of List-Unsubscribe, so a receipt or a password reset never offers an opt-out it cannot act on.
  • Message-Category is set to bulk/newsletter for marketing and transaction/commercial for transactional, and Precedence: bulk is applied to marketing only.
  • CSA complaint headers are included: X-CSA-Complaints, X-Complaints-To and Abuse-Reports-To. CSA is the Certified Senders Alliance.
  • Suppression state is held per sending domain, so a marketing unsubscribe does not withhold a transactional message sent from a separate domain.

At a glance

The List-Unsubscribe header at a glance

  • The List-Unsubscribe header tells a mailbox provider how to remove a recipient from a mailing list, and it is what produces the native unsubscribe button shown in Gmail and Yahoo.
  • RFC 8058 defines one-click unsubscribe using two headers: List-Unsubscribe and List-Unsubscribe-Post.
  • RFC 8058 requires the List-Unsubscribe header to contain at least one HTTPS URI.
  • List-Unsubscribe-Post must carry the value List-Unsubscribe=One-Click. There are no other valid values.
  • RFC 8058 was published in January 2017, seven years before the Google and Yahoo bulk sender requirements it is now associated with.
  • Google requires marketing and subscribed messages to support one-click unsubscribe from senders of more than 5,000 messages per day to personal Gmail accounts.
  • Google does not count mail to Google Workspace accounts toward the 5,000 per day threshold.
  • Google requires unsubscribe requests to be processed and honored within 48 hours.
  • Yahoo requires the list-unsubscribe header "preferably according to RFC 8058" and describes the POST method as highly recommended rather than mandatory.
  • Yahoo requires unsubscribes to be honored within two days, and states that an unsubscribe not honored within two days does not meet the requirement.
  • Microsoft requires a functional and clearly visible way to opt out but has not mandated RFC 8058, which it supports and recommends.
  • Transactional emails are exempt from the unsubscribe requirements at Google, Yahoo and Microsoft.
  • A visible unsubscribe link in the message body is required by all three providers, and does not satisfy the header requirement on its own.
  • The RFC 8058 POST requirement exists because security scanners follow GET links, which would otherwise unsubscribe recipients who never asked.
  • Automated security systems click both unsubscribe links and opt-in confirmation links, despite vendor efforts to avoid them.
  • Double opt-in confirmation links have no equivalent of the RFC 8058 protection and are typically plain GET URLs.
  • An opt-in confirmation link that confirms on page load can be triggered by a security scanner, creating a consent record the recipient never gave.
  • Opt-in confirmation should require a deliberate browser interaction, such as a checkbox and submit button or a CAPTCHA and confirm button, before consent is recorded.
  • Omnivery sets List-Unsubscribe automatically on marketing messages and never on transactional messages.
  • Omnivery sets List-Help on transactional messages instead of List-Unsubscribe.

Questions

List-Unsubscribe questions

What is the List-Unsubscribe header?

The List-Unsubscribe header is an email header that tells the recipient's mailbox provider how to unsubscribe someone from a mailing list. When it is present, providers like Gmail and Yahoo display a native unsubscribe button at the top of the message, next to the sender name, separate from any unsubscribe link in the message body. It was defined in RFC 2369 in 1998 and originally carried a mailto: address; RFC 8058 later required an HTTPS URI so the unsubscribe could be completed in one click.

What is RFC 8058?

RFC 8058, "Signaling One-Click Functionality for List Email Headers", is the 2017 specification that defines one-click unsubscribe. It requires the List-Unsubscribe header to contain at least one HTTPS URI, adds a second header, List-Unsubscribe-Post, with the fixed value List-Unsubscribe=One-Click, and requires that the URI accept an HTTP POST which completes the unsubscribe with no further interaction from the recipient. It predates the Google and Yahoo bulk sender requirements by seven years.

What is the difference between List-Unsubscribe and List-Unsubscribe-Post?

List-Unsubscribe carries the destination: one or more URIs, at least one of which must be an HTTPS URL for RFC 8058 compliance. List-Unsubscribe-Post carries no information at all beyond a fixed signal, the literal value List-Unsubscribe=One-Click, which tells the mailbox provider that the HTTPS URL will accept a one-click POST. Both headers must be present. A message carrying only List-Unsubscribe does not get a one-click unsubscribe button.

Do I need one-click unsubscribe if I already have an unsubscribe link in the footer?

Yes. The two are separate requirements and both are required. Google, Yahoo and Microsoft all require a clearly visible unsubscribe link in the message body, and Google and Yahoo additionally require the list-unsubscribe header for marketing and subscribed messages. A footer link does not satisfy the header requirement, and the header does not remove the need for the visible link.

Does one-click unsubscribe apply to transactional emails?

No. Transactional messages are exempt at all three providers. Google draws the line at messages sent for legal reasons or in response to an explicit action by the user, giving password resets, purchase receipts and one-time passcodes as examples; Yahoo states the requirement covers promotional and marketing messages and does not apply to transactional ones. Beyond the exemption, adding an unsubscribe control to transactional mail is an error: a password reset is not a subscription, and honoring an opt-out from it could lock the recipient out of their account. Use List-Help instead, pointing at support.

How quickly do I have to process an unsubscribe request?

Google requires unsubscribe requests to be processed and honored within 48 hours. Yahoo requires them to be honored within two days and states explicitly that an unsubscribe not honored in two days does not meet the requirement. Microsoft does not publish a processing deadline. Recording the request is not the same as honoring it: a suppression list applied at campaign build time rather than at send time can easily exceed both windows.

Does the Google requirement apply to Google Workspace addresses?

No. Google's bulk sender guidelines cover senders of more than 5,000 messages per day to personal Gmail accounts. Mail to Google Workspace accounts is not counted toward that threshold and is governed separately. This matters for B2B programs, where a large share of the list may be corporate Workspace addresses: the sender can be under Google's threshold while their own total volume looks well over it.

What happens if I do not comply?

Enforcement has moved from filtering to rejection. Microsoft began rejecting mail that fails its authentication requirements at the SMTP level in May 2025, returning 550 5.7.515, rather than routing it to the junk folder as originally announced. Google escalated during November 2025 from temporary failures to permanent rejection for traffic that does not meet its requirements. A non-compliant message is increasingly not a message in the spam folder but a message that was never delivered.

Why should the unsubscribe URL accept POST rather than GET?

Because security gateways and link scanners follow GET links to check them for malware and phishing, before the recipient ever sees the message. A GET-based unsubscribe URL is an ordinary link to that infrastructure, so it gets fetched, and fetching it performs the unsubscribe. Requiring a POST with a specific body means an automated fetch that follows links cannot trigger the action behind the URL.

Can bots or security scanners trigger an unsubscribe?

If the unsubscribe endpoint acts on a GET request, yes, and it happens routinely. Security vendors do make an effort to recognize unsubscribe links and leave them alone, and they get it wrong regularly. That is precisely the failure RFC 8058 was written to prevent. An endpoint that only acts on a POST carrying List-Unsubscribe=One-Click cannot be triggered by link scanning.

Can a security scanner confirm a double opt-in?

Yes, and unlike unsubscribes there is no standard preventing it. Double opt-in confirmation links are almost always plain GET URLs, so the same scanning infrastructure that follows an unsubscribe link follows the confirmation link and records a subscription the recipient never confirmed. The result is a consent record with a timestamp on it that reflects a security scanner rather than a person.

How do I stop bots from confirming opt-in links?

Make the confirmation link render a page rather than perform the confirmation. The page should require a deliberate action before the opt-in is recorded: a checkbox and a submit button, a CAPTCHA and a confirm button, or any equivalent interaction an automated fetch cannot complete. As a rule, a GET request should render the confirmation page and only a subsequent POST from that page should record consent. It is the same principle RFC 8058 applies to unsubscribes, applied to the opposite end of the subscription lifecycle.

Is a bot-confirmed opt-in valid consent under GDPR?

No. Consent under the GDPR requires a freely given, specific, informed and unambiguous indication of the recipient's wishes, given by a clear affirmative action, and the burden of demonstrating it sits with the controller. A confirmation generated by a security scanner is none of those things. The record will look valid in a database and will not survive being challenged, which is why the confirmation step needs to be one an automated system cannot complete.

Does Microsoft require RFC 8058?

No. Microsoft's requirements for high-volume senders, announced in April 2025 and enforced from 5 May 2025, mandate SPF, DKIM and DMARC along with a functional and clearly visible way to opt out. One-click unsubscribe under RFC 8058 is supported and recommended but not mandated, so failing RFC 8058 alone does not make a sender non-compliant with Microsoft. Google and Yahoo are stricter on this point, and implementing RFC 8058 is the sensible default regardless.

Sources

The provider requirements on this page are quoted from each provider's own documentation rather than from secondary commentary, because the differences between them are exactly what secondary commentary flattens. All checked September 2026; all three providers revise these pages.

Related guides

This page covers the opt-out end of the subscription lifecycle. The opt-in end has the same problem and none of the protection.

  • Double opt-in, and how bots break it - the other half of this pair. RFC 8058 forces a POST on unsubscribes because scanners follow GET links; opt-in confirmation links are still plain GETs, so the same scanners confirm subscriptions nobody agreed to.
  • The email pixel consent map - a separate permission again. Being allowed to send a message, and being allowed to measure whether it was opened, are two different questions with two different answers.
  • Non-Human Interactions (NHI) - what the automated clicking actually is, where it comes from, and why it cannot simply be blocked.