====== ListServer ======

===== Overview =====

The Synchronet ListServer (''[[dir:exec]]/listserver.js'') allows Internet e-mail clients
to subscribe and (optionally) contribute messages to your local message bases
using nothing but a standard Internet mail client (e.g. Outlook/OE, Eudora,
Pine, etc.).

===== Requirements =====
The Synchronet ListServer requires Synchronet v3.12 or later.

===== How it works =====

The Synchronet ListServer works much like traditional Internet mailing list
severs, such as "Majordomo" and "Listserv".

The user of an Internet e-mail client "subscribes" to one of your mailing
lists by sending an e-mail message to the address of your ListServer
(typically "listserver@yourbbs.com"). In the body of the message (or
optionally, the subject), the line "subscribe listname" must exist,
where "listname" is the name of one of your mailing lists (as configured
in your ''[[dir:ctrl]]/[[config:listserver.ini]]'' file, described later).

Once subscribed, the user will automatically receive, in their mailbox,
any messages posted in the message area (sub-board) corresponding to the
mailing list. A user may unsubscribe from the mailing list by the same
means but using the command "unsubscribe listname".

The ListServer will respond to other "control messages" like these. A
control message of "help" will return a list of valid commands to the
requesting client's mailbox.

==== MIME ====

The ListServer does not at this time support the decoding of [[wp>MIME]]-encoded control message body text. The simplest solution to this issue is to only accept control commands in the //Subject// of control messages by configuring the following in the root section of your ''[[dir:ctrl]]/[[config:listserver.ini]]'' file:
<code ini>
SubjectCommand = true
BodyCommand = false
</code>

MIME-encoded mailing list //submissions// (posted messages) are supported, however.
===== Submissions =====
Writable mailing lists allow the user to submit messages to the list by
sending e-mail messages addressed to ''listname@yourbbs.com''. Submissions
are automatically posted to the message area (sub-board) associated with
the mailing list and forwarded to all mailing list subscribers.


===== Configuration =====

1. If you haven't already, create the message areas (sub-boards) in SCFG that
you want to make available as mailing lists. Be sure to make a note
of the configured "internal code" associated with each sub-board you are
going to associate with a list.

2. Edit your ''[[dir:ctrl]]/[[config:listserver.ini]]'' file:

  * creating a separate section for each mailing list and specifying the "internal code" of the associated sub-board using the ''sub'' key. See the stock ''[[https://gitlab.synchro.net/main/sbbs/-/blob/master/ctrl/listserver.ini|listserver.ini]]'' for an example.
  * If you wish to allow control commands in the subject of messages addressed to the ListServer, set ''SubjectCommand = true'' in the [[:config:INI_files#root section]] of the file.
  * Set ''disabled = false'' in the [[:config:INI_files#root section]] portion of the file to enable the ListServer.

3. Edit your ''[[dir:ctrl]]/[[config:mailproc.ini]]'' file, adding (if you don't have it already)
the following section:
<code ini>
[listserver.js]
   to = listserver, listserv
   passthru = false
</code>
Include in the "to" value the names of any writable (not readonly) lists
from your ''listserver.ini'' file. Be sure to separate the names with commas.

Example:
<code ini>
to = listserver, listserv, listname1, listname2, etc.
</code>

4. Add the command-line of ''?listserver'' as a timed-event in [[util:SCFG]]->External
Programs->Timed Events. This is necessary for the distribution of 
messages posted to sub-boards associated with mailing lists.

5. Recycle your mail server, if it didn't automatically recycle after saving
your changes in SCFG in step 4. This is required to re-load your modified
''[[dir:ctrl]]/[[config:mailproc.ini]]'' file into the mail server.


===== Maintenance =====

The list of subscribers is kept in the file ''[[dir:data]]/subs/code.list.sub'', where 
''code'' is the sub-board's internal code. There is currently no mechanism for
removing subscribers with bad e-mail addresses, but there will be in the
future.

===== See Also =====
  * [[:config:listserver.ini]]
  * [[:config:mailproc.ini]]
  * [[:server:mail|Mail Server]]
  * [[:module:|Modules]]
