greenhouse

greenhouse

minimal software forge

git clone git@git.lostduk.com:greenhouse.git

greenhouse / pollen / pollen.1194 lines · 3567B · raw

1.TH POLLEN 1 pollen
2.SH NAME
3pollen \- mailing list manager
4.SH SYNOPSIS
5.B pollen
6.I list
7.RI [ extension ]
8.SH DESCRIPTION
9.B pollen
10delivers one message, read from standard input, to the mailing list
11.IR list .
12It is meant to run as a Postfix
13.BR pipe (8)
14transport.
15The envelope sender is taken from the
16.B Return-Path
17header that Postfix prepends.
18.P
19Without an
20.IR extension ,
21the message is a post.
22It is rejected if it has no
23.BR Message-ID ,
24if it already carries this list's
25.BR List-Id ,
26if it is larger than
27.BR maxsize ,
28or if the address in its single
29.B From
30header may not post.
31Otherwise the
32.BR List-Id ,
33.BR List-Post ,
34.BR List-Subscribe ,
35.BR List-Unsubscribe ,
36.B List-Help
37and
38.B Precedence
39headers are prepended, plus
40.B List-Archive
41if
42.B web
43is set and the list is
44.BR public ,
45incoming
46.BR List-* ,
47.B Return-Path
48and
49.B Delivered-To
50headers are dropped and everything else is kept byte for byte.
51The result is stored in the archive and then handed to
52.B sendmail
53in a single call for all subscribers, with
54.IB list +bounces@ domain
55as envelope sender.
56If that call fails, the archived copy is removed again so Postfix can
57retry cleanly.
58.SH COMMANDS
59Commands are addressed as
60.IB list + command @ domain .
61.TP
62.B subscribe, unsubscribe
63Mail a confirmation request to the
64.B From
65address.
66For subscriptions to a closed list the request goes to the list owner
67instead.
68.TP
69.BI confirm- token
70Apply a pending request and notify the subscriber.
71Requests expire after
72.B expiry
73seconds.
74.TP
75.B bounces
76Log the bounce to syslog.
77Subscribers are not removed.
78.TP
79.B help
80Reply with the list of command addresses, as does any other extension.
81.P
82No reply is ever sent to a message with an
83.B Auto-Submitted
84header other than
85.BR no ,
86a
87.B Precedence
88of
89.BR bulk ,
90.B list
91or
92.BR junk ,
93or a null or
94.B MAILER-DAEMON
95envelope sender.
96.SH FILES
97Lists live in
98.IR root /
99.IR list /,
100where the list name matches
101.BR ^[a-z0-9][a-z0-9-]*$ .
102.TP
103.B description
104One line describing the list.
105.TP
106.B owner
107Owner address.
108.TP
109.B post
110Who may post:
111.BR anyone ,
112.B subscribers
113or
114.BR owner .
115The owner may always post.
116.TP
117.B subscribe
118.B open
119or
120.BR closed .
121.TP
122.B public
123Present if the archive is public; only then does pollen advertise it
124in
125.B List-Archive
126and help replies.
127.TP
128.B subscribers
129One lowercase address per line, written by pollen.
130.TP
131.BI pending/ token
132.RI \(dq action " " address " " time \(dq
133for each open request, written by pollen.
134.TP
135.B archive/
136Maildir of every distributed post, exactly as sent.
137.TP
138.B .lock
139Lock file serializing changes to
140.BR subscribers .
141.SH EXIT STATUS
142.TP
143.B 0
144The message was accepted.
145.TP
146.B EX_NOUSER
147No such list.
148.TP
149.B EX_NOPERM
150The message was rejected; the reason is printed to standard output.
151.TP
152.B EX_TEMPFAIL
153Transient failure; Postfix will retry.
154.SH POSTFIX
155.B master.cf:
156.P
157.nf
158pollen unix - n n - - pipe
159  flags=Rq user=pollen argv=/usr/local/bin/pollen ${user} ${extension}
160.fi
161.P
162.B main.cf:
163.P
164.nf
165recipient_delimiter = +
166transport_maps = hash:/etc/postfix/transport
167pollen_destination_recipient_limit = 1
168relay_domains = lists.lostduk.com
169relay_recipient_maps = hash:/etc/postfix/lists
170.fi
171.P
172.BR transport :
173.P
174.nf
175lists.lostduk.com pollen:
176.fi
177.P
178.B relay_recipient_maps
179lists every
180.IR list ,
181so Postfix rejects unknown lists before queueing.
182.B pollen_destination_recipient_limit
183must be 1.
184The
185.B pollen
186user needs write access to every list directory.
187.SH CUSTOMIZATION
188.B pollen
189is configured by editing
190.I config.h
191and recompiling.
192.SH SEE ALSO
193.BR pipe (8),
194.BR sendmail (1)