The following notes answer some common questions, and may be useful to you when installing, configuring or using django-contact-form.
As of django-contact-form , Django 2.2, 3.1, and 3.2 are supported, on Python 3.6, 3.7, 3.8, and 3.9.
django-contact-form is offered under a three-clause BSD-style license; this is an OSI-approved open-source license, and allows you a large degree of freedom in modifying and redistributing the code. For the full terms, see the file LICENSE which came with your copy of django-contact-form; if you did not receive a copy of this file, you can view it online at <https://github.com/ubernostrum/django-contact-form/blob/master/LICENSE>.
Usable default templates, for an application designed to be widely reused, are essentially impossible to produce; variations in site design, block structure, etc. cannot be reliably accounted for. As such, django-contact-form provides bare-bones (i.e., containing no HTML structure whatsoever) templates in its source distribution to enable running tests, and otherwise just provides good documentation of all required templates and the context made available to them.
Most likely, you have an error in your ~contact_form.forms.ContactForm
subclass. Specifically, one or more of ~contact_form.forms.ContactForm.from_email
, ~contact_form.forms.ContactForm.recipient_list
or ~contact_form.forms.ContactForm.subject
are returning values which contain newlines.
As a security precaution against email header injection attacks (which allow spammers and other malicious users to manipulate email and potentially cause automated systems to send mail to unintended recipients), Django's email-sending framework does not permit newlines in message headers. ~django.core.mail.BadHeaderError
is the exception Django raises when a newline is detected in a header. By default, contact_form.forms.ContactForm.subject
will forcibly condense the subject to a single line.
Note that this only applies to the headers of an email message; the message body can (and usually does) contain newlines.
The canonical development repository for django-contact-form is online at <https://github.com/ubernostrum/django-contact-form>. Issues and pull requests can both be filed there.
If you'd like to contribute to django-contact-form, that's great! Just please remember that pull requests should include tests and documentation for any changes made, and that following PEP 8 is mandatory. Pull requests without documentation won't be merged, and PEP 8 style violations or test coverage below 100% are both configured to break the build.
I'm getting errors about "akismet" when trying to run tests?
The full test suite of django-contact-form exercises all of its functionality, including the spam-filtering ~contact_forms.forms.AkismetContactForm
. That class uses the Wordpress Akismet spam-detection service to perform spam filtering, and so requires the Python akismet module to communicate with the Akismet service, and some additional configuration (in the form of a valid Akismet API key and associated URL).
By default, the tests for ~contact_forms.forms.AkismetContactForm
will be skipped unless the required configuration (in the form of either a pair of Django settings, or a pair of environment variables) is detected. However, if you have supplied Akismet configuration but do not have the Python akismet module, you will see test errors from attempts to import akismet. You can resolve this by running:
pip install akismet
or (if you do not intend to use ~contact_forms.forms.AkismetContactForm
) by no longer configuring the Django settings/environment variables used by Akismet.
Additionally, if the ~contact_forms.forms.AkismetContactForm
tests are skipped, the default code-coverage report will fail due to the relevant code not being exercised during the test run.