.TH POLLEN 1 pollen\-VERSION .SH NAME pollen \- mailing list manager .SH SYNOPSIS .B pollen .I list .RI [ extension ] .br .B pollen .B \-v .SH DESCRIPTION .B pollen delivers one message, read from standard input, to the mailing list .IR list . It is meant to run as a Postfix .BR pipe (8) transport. The envelope sender is taken from the .B Return-Path header that Postfix prepends. .P Without an .IR extension , the message is a post. It is rejected if it has no .BR Message-ID , if it already carries this list's .BR List-Id , if it is larger than .BR maxsize , or if the address in its single .B From header may not post. Otherwise the .BR List-Id , .BR List-Post , .BR List-Subscribe , .BR List-Unsubscribe , .B List-Help and .B Precedence headers are prepended, plus .B List-Archive if .B web is set and the list is .BR public , incoming .BR List-* , .B Return-Path and .B Delivered-To headers are dropped and everything else is kept byte for byte. The result is stored in the archive and then handed to .B sendmail in a single call for all subscribers, with .IB list +bounces@ domain as envelope sender. If that call fails, the archived copy is removed again so Postfix can retry cleanly. .SH OPTIONS .TP .B \-v prints version information to stderr, then exits. .SH COMMANDS Commands are addressed as .IB list + command @ domain . .TP .B subscribe, unsubscribe Mail a confirmation request to the .B From address. For subscriptions to a closed list the request goes to the list owner instead. .TP .BI confirm- token Apply a pending request and notify the subscriber. Requests expire after .B expiry seconds. .TP .B bounces Log the bounce to syslog. Subscribers are not removed. .TP .B help Reply with the list of command addresses, as does any other extension. .P No reply is ever sent to a message with an .B Auto-Submitted header other than .BR no , a .B Precedence of .BR bulk , .B list or .BR junk , or a null or .B MAILER-DAEMON envelope sender. .SH FILES Lists live in .IR root / .IR list /, where the list name matches .BR ^[a-z0-9][a-z0-9-]*$ . .TP .B description One line describing the list. .TP .B owner Owner address. .TP .B post Who may post: .BR anyone , .B subscribers or .BR owner . The owner may always post. .TP .B subscribe .B open or .BR closed . .TP .B public Present if the archive is public; only then does pollen advertise it in .B List-Archive and help replies. .TP .B subscribers One lowercase address per line, written by pollen. .TP .BI pending/ token .RI \(dq action " " address " " time \(dq for each open request, written by pollen. .TP .B archive/ Maildir of every distributed post, exactly as sent. The archive is group-readable for archive readers such as herbarium; everything else pollen writes is private to its user. .TP .B .lock Lock file serializing changes to .BR subscribers . .SH EXIT STATUS .TP .B 0 The message was accepted. .TP .B EX_NOUSER No such list. .TP .B EX_NOPERM The message was rejected; the reason is printed to standard output. .TP .B EX_TEMPFAIL Transient failure; Postfix will retry. .SH POSTFIX .B master.cf: .P .nf pollen unix - n n - - pipe flags=Rq user=pollen argv=/usr/local/bin/pollen ${user} ${extension} .fi .P .B main.cf: .P .nf recipient_delimiter = + transport_maps = hash:/etc/postfix/transport pollen_destination_recipient_limit = 1 relay_domains = lists.lostduk.com relay_recipient_maps = hash:/etc/postfix/lists .fi .P .BR transport : .P .nf lists.lostduk.com pollen: .fi .P .B relay_recipient_maps lists every .IR list , so Postfix rejects unknown lists before queueing. .B pollen_destination_recipient_limit must be 1. The .B pollen user needs write access to every list directory. .SH CUSTOMIZATION .B pollen is configured by editing .I config.h and recompiling. .SH SEE ALSO .BR herbarium (1), .BR pipe (8), .BR sendmail (1)