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.