The astonishingly simple anonymous mailing list
Python Perl
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
deliver
deploy
test_data
.gitignore
INSTALL.markdown
LICENSE.txt
README.markdown
TODO
config.py.example
deliverdaemon.py
digester.py
logging.conf.example
manifest.json
members.json.example
panic
setup.py
updater.py

README.markdown

Deliver

This package is a mailing list manager, that allows sending mails to a defined group of users. It was born after some time using Mailman, which did not have some customizations that I wanted.

For installation instructions refer to the INSTALL.markdown document.

In a nutshell, deliver offers a simple mailing list, intended for small user bases, that can be easily adapted to one's needs. Some of the most special features are:

Anonymity

The sent mails don't include the email address of the original sender(s), neither in the headers nor in the body of the message.

Custom header/footer

To identify the sender of an email, a custom header is added to each message with a name or alias for the user. The footer is also configurable.

Delivery

Only members of the list are allowed to send messages to the list. Additionally, a whitelist and a blacklist can be specified, to add addresses that are outright accepted/rejected. Whitelisting can be skipped with a configuration option.

Digests

A member can receive messages in digests. Every received message is archived. Then, at some point, a digest is generated for a user, containing all the messages pending for the user in text format.

Offline websites

For those that can only use email, there is the possibility to request a webpage and get it as an email attachment. You only have to send an email to the list with a subject like GET _url_, and you'll get an email with the url downloaded as an attachment.

Forbidden words

A list of words can be defined that should not appear in the body of a message. If they do, they are replaced with the given replacement. The process is case insensitive, and punctuation surrounding the word is ignored. However, subwords are not replaced (for example, if place is in the list, replace won't be substituted).

Configuration

Many options are configurable, via a config.py file. An example file is included in the distribution under the name config.py.example. The effect of each key is explained there.

Members List

The members list is stored in a json document. For each user, there is a number of fields:

  1. name - string: The name to identify the user in emails.

  2. aliases - list(string): (Optional) list of aliases that can be used in place of the name. Default is empty.

  3. email - dict(string, string): A hash containing the email addresses for the user, each one identified by a key.

  4. send_to - string: (Optional) key of the email to use for the user. Default value is ''default''.

  5. active - boolean: Whether the user should receive emails or not.

  6. digest - boolean: (Optional) whether the user should receive emails in digest mode. Defaults to false.

An example file members.json.example is included in the distribution.