| LEFT | RIGHT | 
|---|
| (no file at all) |  | 
|  | 1 # formmail | 
|  | 2 | 
|  | 3 The web handler that extracts form data from a POST request, uses it to | 
|  | 4 populate an email template and then sends the produced email to a configured | 
|  | 5 list of addresses. | 
|  | 6 | 
|  | 7 ## Dependencies | 
|  | 8 | 
|  | 9 * [Python 2.7](https://www.python.org/download/releases/2.7/) | 
|  | 10 * [Jinja2](http://jinja.pocoo.org/docs/2.10/intro/) | 
|  | 11 * Other packages are required for testing, please see the list of 'deps' in | 
|  | 12   [`tox.ini`](../../tox.ini) | 
|  | 13 | 
|  | 14 ## Running the web handler | 
|  | 15 | 
|  | 16 Normally, the formmail web handler is run by the multiplexer, and configured | 
|  | 17 via the sitescripts config file. Please refer to the main | 
|  | 18 [README](../../README.md) for more information about the multiplexer and | 
|  | 19 configuring `sitescripts.ini`. | 
|  | 20 | 
|  | 21 In order to activate this handler, add the following line to the multiplexer | 
|  | 22 config file: | 
|  | 23 | 
|  | 24     [multiplexer] | 
|  | 25     sitescripts.formmail.web.formmail = | 
|  | 26 | 
|  | 27 ## Configuring the web handler | 
|  | 28 | 
|  | 29 `formmail.py` can handle multiple URLs and forms. Each URL will correspond to a | 
|  | 30 group of config variables that all start with the same prefix, for example: | 
|  | 31 handler1. These variables are configured in the [formmail] section of the | 
|  | 32 config file. | 
|  | 33 | 
|  | 34 The URL of the form, where the POST request comes from: | 
|  | 35 | 
|  | 36     [formmail] | 
|  | 37     handler1.url = formmail/test/apply/submit | 
|  | 38 | 
|  | 39 The CSV file into which all submissions will be saved (optional): | 
|  | 40 | 
|  | 41     handler1.csv_log = /var/log/handler1-log.csv | 
|  | 42 | 
|  | 43 The Jinja2 template for the email. This is where the recipient email addresses | 
|  | 44 are entered. | 
|  | 45 [(See an example email template here.)](formmail/test/template/test.mail) | 
|  | 46 | 
|  | 47     handler1.template = formmail/handler1/mail-template.tmpl | 
|  | 48 | 
|  | 49 The `handler1.fields.xxx` subgroup includes the descriptions of the form | 
|  | 50 fields, and these must match the fields on the form. These are the fields | 
|  | 51 expected in the POST request and then made available to the template. Each | 
|  | 52 variable in the group defines a field and its value can be: | 
|  | 53 * "mandatory" (which makes the field mandatory) | 
|  | 54 * and/or "email" (which makes the field an email) | 
|  | 55 * or it can be empty (just a normal optional field). | 
|  | 56 | 
|  | 57 For mandatory fields we can also set "group-name.fields.field-name.mandatory" | 
|  | 58 to override the error message that will be returned by the handler if the field | 
|  | 59 was empty. Likewise for email fields we can define | 
|  | 60 "group-name.fields.field-name.email" to set the error message that's returned | 
|  | 61 if the content of the field doesn't look like an email. See an example: | 
|  | 62 | 
|  | 63     handler1.fields.email = mandatory, email | 
|  | 64     handler1.fields.email.mandatory = You failed the email test | 
|  | 65     handler1.fields.email.email = You failed the email validation | 
|  | 66     handler1.fields.non_mandatory_email = email | 
|  | 67     handler1.fields.non_mandatory_message = | 
|  | 68     handler1.fields.mandatory = mandatory | 
| LEFT | RIGHT | 
|---|