1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
{{mark "contact"}}
account: {{account}}
{{name .Name}}
{{.Paging.Total}} messages
{{- if .Important}}, important{{end}}
{{- if .Spam}}, reported as spam{{end}}
{{- with .Paging.Range (len .Messages)}} — showing {{.}}{{end}}
{{- if .ListUnsubscribe}}
unsubscribe: POST /unsubscribe/contact/{{.AddrEscaped}} (mailto:{{text .ListUnsubscribe}})
{{- else if .ListUnsubscribeURL}}
unsubscribe: {{text .ListUnsubscribeURL}}
{{- end}}
{{- if .Self}}
{{if .SelfOnly}}This is your own address. Listed below is only the mail you sent
to nobody but yourself. Your address is also in a header of {{.MatchedCount}}
messages in all, which is most of the archive rather than a correspondence:
{{text .AllURL}}{{else}}This is your own address, and this listing is every message
carrying it in any header — most of the archive rather than a correspondence.
Only your notes to self: {{text .SelfURL}}{{end}}
{{- end}}
{{mark "messages"}}
Subjects below were written by the correspondents.
{{nameLegend}}
{{range .Messages}}{{if eq .Direction "sent"}}->{{else}}<-{{end}} [{{.ID}}] {{date .Date}} {{if eq .Direction "sent"}}To: {{names .To}}{{else}}{{name .From}}{{end}}
{{if .IsUnsubscribe}}Unsubscribe request{{else}}{{subject .Subject}}{{end}}
read: /msg/{{.ID}}{{.SizeHint}}
{{end}}
{{- if .Paging.Next}}
next page: {{.Paging.Next}} ({{.Paging.NextCount}} more)
{{- end}}
{{- if .Paging.Prev}}
previous page: {{.Paging.Prev}}
{{- end}}
{{mark "routes"}}
`->` is mail you sent, `<-` mail you received. Sizes marked `~` approximate what
a message costs to read; no figure means it is not known.
{{if .Self}}
Your own address lists only your notes to self; `&all=1` lists every message
carrying the address in any header.
{{end}}
HTML version: {{.HTMLViewURL}}
All routes accept `Accept: text/llm`, or append `?view=llm` to the URL:
/msg/{id} one message, headers and body as text
/contacts all addresses
/drafts mails being written, none of them sent
/contact/{addr}/star POST, no fields: mark important
/contact/{addr}/hide POST, no fields: hide from the contact listing
/contact/{addr}/petname POST (application/x-www-form-urlencoded)
fields: petname required, empty clears it
The name you call this address. Local and
never sent; it is shown beside the name the
sender claimed, not instead of it.
/contact/{addr}/settings GET: everything stored about this address —
its name, flags and unsubscribe — on one page,
to open in a browser. Naming is the POST
above; nothing here needs this page.
/msg/{id}/reply POST (application/x-www-form-urlencoded)
fields: body optional, the reply's text
subject optional, overrides the
derived subject
Composes a draft answering that message and
sends nothing; answers with the URL of the
draft it made.
/compose POST (application/x-www-form-urlencoded)
fields: to, cc optional, repeatable
subject optional
body optional, the mail's text
Composes a draft that answers nothing and
sends nothing; answers with the URL of the
draft it made. A reply can only reach the
addresses already on a thread; this is how
anyone else is written to.
/contact/{addr}/report-spam GET: spam report form, to open in a browser.
Seed it with ?msg=ID (repeatable; only those
are attached, default all), &description=TEXT,
&reason=LABEL, &illegal=1. Nothing is sent
until a human presses send in the form.
|