| 1 | = Project Lancelot FAQ = |
|---|
| 2 | |
|---|
| 3 | (or, rather, questions likely to be frequently asked if anybody would |
|---|
| 4 | actually use the software except myself) |
|---|
| 5 | |
|---|
| 6 | == Project Lancelot Meta-Information == |
|---|
| 7 | |
|---|
| 8 | '''Q.''' Where do I get Project Lancelot? |
|---|
| 9 | |
|---|
| 10 | The official Project Lancelot web site is at |
|---|
| 11 | http://lancelot.anselms.net/ . This contains the software (both |
|---|
| 12 | ready-made releases as well as the master revision control repository, |
|---|
| 13 | available through Mercurial), documentation, a timeline, roadmap and |
|---|
| 14 | bug-tracking system. |
|---|
| 15 | |
|---|
| 16 | We're working on getting Project Lancelot integrated into the Debian |
|---|
| 17 | GNU/Linux distribution but there is no timeframe for this yet. |
|---|
| 18 | |
|---|
| 19 | '''Q.''' Why the funny name? |
|---|
| 20 | |
|---|
| 21 | '''A.''' If you think »Project Lancelot« is funny you must not have |
|---|
| 22 | heard of that other mailing list manager which is called »Enemies of |
|---|
| 23 | Carlotta« :^) |
|---|
| 24 | |
|---|
| 25 | The name came up when we were talking about starting the project. I |
|---|
| 26 | had recently been reading T. H. White's »The Once and Future King« to |
|---|
| 27 | my SO, and it occurred to me that mailing list management as a field |
|---|
| 28 | of endeavour was in dire need of a knight riding in to slay all the |
|---|
| 29 | dragons and free all the damsels in distress. Of course for all the |
|---|
| 30 | nobility this is ultimately futile (we're not going to replace Mailman |
|---|
| 31 | anytime soon), hence Lancelot. I could have called it Don Quixote but |
|---|
| 32 | that name is already spoken for. |
|---|
| 33 | |
|---|
| 34 | |
|---|
| 35 | == Project Lancelot Configuration == |
|---|
| 36 | |
|---|
| 37 | '''Q.''' How do I conveniently transfer settings from one list to |
|---|
| 38 | another? |
|---|
| 39 | |
|---|
| 40 | '''A.''' You can initialise a new list from the settings of an |
|---|
| 41 | existing list using |
|---|
| 42 | {{{ |
|---|
| 43 | $ pl-init --clone=oldlist@example.com newlist@example.com admin@example.com |
|---|
| 44 | }}} |
|---|
| 45 | This will use the configuration settings from ''oldlist@example.com'' |
|---|
| 46 | except for the '''list.name''', '''list.address''', and |
|---|
| 47 | '''list.owneraddress''' parameters, which are set as for a new |
|---|
| 48 | list. The details are in pl-init(1). It is also possible to override |
|---|
| 49 | individual items when cloning a list, by giving them on the command |
|---|
| 50 | line as usual. |
|---|
| 51 | |
|---|
| 52 | Once a list has been created, a nifty way of transferring (groups of) |
|---|
| 53 | configuration items is by doing |
|---|
| 54 | {{{ |
|---|
| 55 | $ pl-conf -q oldlist@example.com PATTERN | pl-conf -i newlist@example.com |
|---|
| 56 | }}} |
|---|
| 57 | where PATTERN is something like ''digest.*'' (to transfer all digest |
|---|
| 58 | settings). |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | == Project Lancelot and MTAs == |
|---|
| 62 | |
|---|
| 63 | '''Q.''' How do I let users manage their own mailing lists without |
|---|
| 64 | involving the mail administrator? |
|---|
| 65 | |
|---|
| 66 | Project Lancelot stores mailing list meta-information in a user's home |
|---|
| 67 | directory, and therefore there is no problem with this in |
|---|
| 68 | principle. The main problem is actually getting mail for a new mailing |
|---|
| 69 | list into pl-incoming(1) without having the mail administrator edit an |
|---|
| 70 | aliases file (or similar). How to do this depends on the system's |
|---|
| 71 | MTA. |
|---|
| 72 | |
|---|
| 73 | It's probably easiest if you're running Qmail; for a list called, |
|---|
| 74 | say ''jdoe-list@example.com'', the user ''jdoe'' simply puts a |
|---|
| 75 | ''.qmail-list-default'' file into their home directory that redirects |
|---|
| 76 | all mail into pl-incoming(1) (some translation of return codes may be |
|---|
| 77 | necessary). |
|---|
| 78 | |
|---|
| 79 | With Postfix, the problem is that while one can use a |
|---|
| 80 | ''recipient_delimiter'' like ''+'' to handle addresses like |
|---|
| 81 | ''jdoe+list@example.com'' by means of a ''.forward+list'' file in |
|---|
| 82 | ''jdoe'''s home directory, it is impossible to foresee all adresses of |
|---|
| 83 | the form ''jdoe+list-bounce-4711-anselm=anselms.net@example.com'' |
|---|
| 84 | which might arise through normal mailing list operations and would |
|---|
| 85 | have to be handled through their own ''.forward'' files. It is |
|---|
| 86 | probably best to use an MDA on steroids like Procmail or Mailfilter to |
|---|
| 87 | funnel all messages whose address extensions start with a list name to |
|---|
| 88 | the pl-incoming(1) command, e.g. (for Procmail), |
|---|
| 89 | {{{ |
|---|
| 90 | :0 H : list.lock |
|---|
| 91 | ^TOjdoe+list |
|---|
| 92 | |/usr/bin/pl-incoming list@example.com |
|---|
| 93 | }}} |
|---|
| 94 | If you're handling mail for many different domains, a more convenient |
|---|
| 95 | way may be to use Postfix's ''virtual_mailbox_domains'' together with |
|---|
| 96 | an MDA like Mailfilter (Postfix's virtual(8) delivery method is |
|---|
| 97 | insufficient because it does not allow delivery to user-specified |
|---|
| 98 | programs). |
|---|
| 99 | |
|---|
| 100 | '''Q.''' What is this VERP thing and why would I want to use it? |
|---|
| 101 | |
|---|
| 102 | '''A.''' VERP, or Variable Envelope Return Path, is a method of |
|---|
| 103 | finding out which bounce messages came from which subscribing |
|---|
| 104 | address. While the subscriber address is often obvious from a bounce |
|---|
| 105 | message, this is not always the case -- people move to new addresses |
|---|
| 106 | and get their mail forwarded from their old accounts, but do not |
|---|
| 107 | bother to change all their mailing list subscription. Hence Project |
|---|
| 108 | Lancelot may be sending a message to ''jdoe@example.com'', whose owner |
|---|
| 109 | may long since have moved to ''john.doe@elsewhere.net'', getting all his |
|---|
| 110 | mail sent on from ''example.com'' to there. If the ''elsewhere.net'' |
|---|
| 111 | address develops a problem, a bounce will be sent to Project Lancelot |
|---|
| 112 | from the ''john.doe@elsewhere.net'' address, which Project Lancelot will |
|---|
| 113 | not be able to find in the subscriber database, since the subscription |
|---|
| 114 | is still in the name of ''jdoe@example.com''. |
|---|
| 115 | |
|---|
| 116 | VERP works by encoding the original subscriber address into the SMTP |
|---|
| 117 | envelope return path, which is the address that a receiving MTA uses |
|---|
| 118 | for bounce messages. Instead of putting something like |
|---|
| 119 | {{{ |
|---|
| 120 | MAIL FROM:<lancelot+bounce@anselms.net> |
|---|
| 121 | }}} |
|---|
| 122 | in a message for ''jdoe@example.com'' |
|---|
| 123 | (which would direct all bounces to ''lancelot+bounce@example.com'', |
|---|
| 124 | with no obvious sign of which subscriber address caused the bounce), |
|---|
| 125 | Project Lancelot uses |
|---|
| 126 | {{{ |
|---|
| 127 | MAIL FROM:<lancelot+bounce-1234-jdoe=example.com@anselms.net> |
|---|
| 128 | }}} |
|---|
| 129 | Thus, bounce messages are sent to this address, which Project Lancelot |
|---|
| 130 | can pick apart to reconstruct that this bounce was caused by a message |
|---|
| 131 | to ''jdoe''. (The ''1234'' is the message number, which for now is duly |
|---|
| 132 | recorded when the bounce is processed, but not used further.) |
|---|
| 133 | |
|---|
| 134 | '''Q.''' Isn't VERP terribly expensive? |
|---|
| 135 | |
|---|
| 136 | It depends. If you have lots of subscribers at the same domain (say, |
|---|
| 137 | ''aol.com''), then without VERP you could send one copy of your |
|---|
| 138 | message to that domain's mail server, with instructions to deliver |
|---|
| 139 | that copy to all of the subscribers there. With VERP, you have to send |
|---|
| 140 | one message per subscriber, which of course seems wasteful. However, |
|---|
| 141 | for many of us robustness is preferable to speed, so with the costs of |
|---|
| 142 | Internet bandwidth being what they are, being able to trace errors is |
|---|
| 143 | often worth the extra traffic. |
|---|
| 144 | |
|---|
| 145 | Project Lancelot supports two different flavours of VERP, according to |
|---|
| 146 | the value of the '''smtp.verp''' parameter. The first (called |
|---|
| 147 | '''lancelot''') lets Project Lancelot do all the work by itself. This |
|---|
| 148 | means that, for a mailing list with N subscribers, it sends N copies |
|---|
| 149 | of every message to the local MTA, each with the correct VERP |
|---|
| 150 | address. The second (called '''smtp''') makes use of the ''XVERP'' |
|---|
| 151 | ESMTP extension to let the local MTA do the VERPing. This means that |
|---|
| 152 | Project Lancelot sends the message to the local MTA with a bunch of up |
|---|
| 153 | to '''smtp.maxrecipients''' subscriber addresses at one go (thus for N |
|---|
| 154 | subscribers, only N/('''smtp.maxrecipients'''+1) messages are |
|---|
| 155 | submitted locally), and the local MTA passes them on with the correct |
|---|
| 156 | VERP-encoded addresses. This is preferable because it puts less load |
|---|
| 157 | on the local MTA. If Project Lancelot is set up for '''smtp'''-style |
|---|
| 158 | VERP and it finds that the local MTA does not support the ''XVERP'' |
|---|
| 159 | extension, it falls back to '''lancelot'''-style VERP. Therefore it is |
|---|
| 160 | usually safe to set '''smtp.verp = smtp''' even if you do not know for |
|---|
| 161 | sure whether your local MTA supports it or not. |
|---|
| 162 | |
|---|
| 163 | '''Q.''' How do I find out whether my MTA supports XVERP? |
|---|
| 164 | |
|---|
| 165 | Read the documentation :^) If you're more of a hands-on type person, |
|---|
| 166 | you could try something along the lines of |
|---|
| 167 | {{{ |
|---|
| 168 | $ telnet localhost smtp <<< contact the local MTA |
|---|
| 169 | Trying 127.0.0.1... |
|---|
| 170 | Connected to mail.example.com. |
|---|
| 171 | Escape character is '^]'. |
|---|
| 172 | 220 mail.example.com ESMTP |
|---|
| 173 | EHLO mail.example.com <<< introduce yourself |
|---|
| 174 | 250-mail.example.com |
|---|
| 175 | ... (a bunch of "250-" lines) ... |
|---|
| 176 | 250-XVERP <<< this line must be there |
|---|
| 177 | ... (possibly more "250-" lines) ... |
|---|
| 178 | 250 8BITMIME <<< or whatever |
|---|
| 179 | }}} |
|---|
| 180 | If the output of your MTA in answer to the '''EHLO''' command does not |
|---|
| 181 | contain a line saying '''XVERP''', then your MTA does not support the |
|---|
| 182 | extension. |
|---|
| 183 | |
|---|
| 184 | ''Note for Postfix users:'' Postfix does support the ''XVERP'' |
|---|
| 185 | extension but, beginning with Postfix 2.1, it must be specially |
|---|
| 186 | enabled. In the Postfix ''main.cf'' file, set the |
|---|
| 187 | '''smtpd_authorized_verp_clients''' parameter to include the address |
|---|
| 188 | and/or network of the machine running Project Lancelot. In the usual |
|---|
| 189 | case of Project Lancelot running on the same machine as your MTA, |
|---|
| 190 | something like |
|---|
| 191 | {{{ |
|---|
| 192 | smtpd_authorized_verp_clients = 127.0.0.1/8 |
|---|
| 193 | }}} |
|---|
| 194 | is fine. |
|---|