Skip to main content

Module unsubscribe

Module unsubscribe 

Source
Expand description

Leaving a mailing list in one click (docs/client.md, “Unsubscribing”).

A list’s message says how to leave it in List-Unsubscribe (RFC 2369): web addresses, mail addresses. When it also carries List-Unsubscribe-Post: List-Unsubscribe=One-Click and a valid DKIM signature covers both headers (RFC 8058 §3.1), an HTTPS POST does it, nothing else asked. Else a message to the list’s address does it, sent as any message is; else only a web page can, and it opens in the browser.

Nothing is contacted for mail set aside (forged, spam, a borrowed name, a blocked sender) or hostile, nor when nothing proves the address it names is the list’s own: a valid signature of the domain shown in From (the message verified), or a valid signature covering List-Unsubscribe by the domain the address belongs to. A forged message could otherwise make Sioul post to, or write to, anyone. What was done is kept on this device (Record), so that a list is not asked twice and you can see it.

Structs§

Left
One list left, or whose page was opened.
List
The list a message comes from.
Offer
What a message offers to leave its list.
Record
The lists you left, kept on this device ($XDG_STATE_HOME/sioul/unsubscribed.toml).
Signed 🔒
A DKIM signature that passed, with the headers it covers (its h= tag).
UnsubscribeView
The Reader’s button, as the window shows it.

Enums§

Refusal
Why one click does nothing.
Way
What one click does.

Constants§

ONE_CLICK
The value of List-Unsubscribe-Post that asks for one click (RFC 8058 §3.1).

Functions§

by_mail 🔒
The message a mailto: address asks for: one recipient (a list’s own address), its subject and text, “unsubscribe” where it says none. Copies it asks for (cc, bcc) are not sent: one click writes to the list alone.
domain_of_address 🔒
The domain a Way::Mail writes to.
host_of
The host of a web address, lower case; none when it is not a name on the Internet (an IP address, “localhost”, a local network’s name): one click reaches nothing on your own network.
list_of
The list a message comes from: its List-Id (“Type & Pixels <letter.typeandpixels.example>”), else its sender.
offer
How to leave the message’s list, or why one click does nothing; none when it names no way out (List-Unsubscribe). trust, lane and reasons are the Porch’s verdict on it (porch::triage); trusted_ids the authserv-ids of its account (Sioul’s own, then the provider’s).
public_host 🔒
A name on the Internet: letters, digits, hyphens and dots, two labels at least, the last of letters; never an IP address nor a local name.
request
The message that asks a list to stop, plain text, from your address.
signatures 🔒
The signatures that passed, as the trusted results header records them (trust::dkim_passes), each with what it covers, read from the DKIM-Signature header it names (domain, selector, start of the signature). When several headers match one result (a copy, altered), a header counts as covered only if all of them cover it: a copy can only take away.
tags 🔒
A DKIM-Signature header’s tags (RFC 6376 §3.2), names lower case, the spaces of each value taken out (they fold a long b= or h=).
uris
The addresses of List-Unsubscribe, in order: each between angle brackets, spaces inside taken out (RFC 2369 §2), comments left aside.
view
The button for a message’s offer. sends_from is the address a message goes out from (the account the message came to), none when it cannot send.
way 🔒