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