Index: sitescripts/formmail/web/formmail.py
===================================================================
--- a/sitescripts/formmail/web/formmail.py
+++ b/sitescripts/formmail/web/formmail.py
@@ -100,8 +100,8 @@
     errors = []
     for field, spec in fields.items():
         if 'mandatory' in spec.value and field not in params:
-                errors.append(make_error(spec, 'mandatory',
-                                         'No {} entered'.format(field)))
+            errors.append(make_error(spec, 'mandatory',
+                                     'No {} entered'.format(field)))
         if 'email' in spec.value and field in params:
             try:
                 params[field] = encode_email_address(params[field])
Index: tox.ini
===================================================================
--- a/tox.ini
+++ b/tox.ini
@@ -14,62 +14,63 @@
 [flake8]
 ignore = D1
 per-file-ignores =
-    /sitescripts/content_blocker_lists/bin/generate_lists.py : A107,E501
-    /sitescripts/crashes/web/submitCrash.py : A302,E501,E711,F401,N802,N806
-    /sitescripts/crawler/bin/import_sites.py : A105,A206,E501
-    /sitescripts/crawler/web/crawler.py : A107,A108,A206,E501
-    /sitescripts/extensions/bin/createNightlies.py : A102,A104,A107,A108,A302,D200,D202,D205,D208,D400,D401,D403,E501,E722,F841,N802,N806,N812,W504
-    /sitescripts/extensions/bin/updateUpdateManifests.py : A107,A206,D200,D202,D205,D400,D401,D403,E501,N802,N806
-    /sitescripts/extensions/test/conftest.py : D200,D400
-    /sitescripts/extensions/test/test_createNightlies.py : D400
-    /sitescripts/extensions/test/test_updateManifests.py : D401
-    /sitescripts/extensions/utils.py : A107,A206,A301,A302,D200,D202,D204,D205,D208,D400,D401,D403,E501,E711,E722,F401,N802,N803,N805,N806,W504
-    /sitescripts/extensions/web/adblockbrowserUpdates.py : A107,E501,E722
-    /sitescripts/extensions/web/downloads.py : E501,E722,F401
-    /sitescripts/formmail/web/formmail.py : E722
-    /sitescripts/formmail/test/test_formmail.py : D210,D400,D401
-    /sitescripts/hg/bin/irchook.py : A104
-    /sitescripts/hg/bin/update_issues.py: W504
-    /sitescripts/hg/test/update_issues.py : N802
-    /sitescripts/management/bin/generateHgAuth.py : A107,E501,E711
-    /sitescripts/management/bin/generateNotifications.py : A301,E501
-    /sitescripts/management/bin/installChanges.py : A102,A107,E501,E713,N802,N803,N806
-    /sitescripts/management/bin/start_services.py : A107,E501
-    /sitescripts/notifications/parser.py : A101,A102,A107,E501,E713,E722
-    /sitescripts/notifications/test/notification.py : E501
-    /sitescripts/notifications/test/parser.py : A107
-    /sitescripts/notifications/web/notification.py : A101,A107,E501
-    /sitescripts/reports/bin/mailDigests.py : A102,A104,A107,A201,A302,E501,E711,F401,N802,N806
-    /sitescripts/reports/bin/parseNewReports.py : A107,A108,A112,A201,A206,A302,E501,E711,E722,F401,N802,N803,N806
-    /sitescripts/reports/bin/processReports.py : E501,F401,N802,N806
-    /sitescripts/reports/bin/removeOldReports.py : E501,N802
-    /sitescripts/reports/bin/removeOldUsers.py : E501,N802
-    /sitescripts/reports/bin/updateDigests.py : A201,A301,A302,E501,E713,F401,N802,N806
-    /sitescripts/reports/bin/updateSubscriptionList.py : A302,E501,E711,N802
-    /sitescripts/reports/utils.py : A206,A302,E501,E711,N802,N803,N806
-    /sitescripts/reports/web/showDigest.py : A206,A301,A302,E501,F401,N802,N806
-    /sitescripts/reports/web/showUser.py : A301,A302,E501,E711,N802
-    /sitescripts/reports/web/submitReport.py : A301,A302,E501,F401,N802,N806
-    /sitescripts/reports/web/updateReport.py : A301,E501,E711,E722,F401,N802,N806
-    /sitescripts/submit_email/web/submit_email.py : E501
-    /sitescripts/subscriptions/bin/generateReport.py : A104,A107,A201,A301,E501,E713,F401,N802,N803,N806
-    /sitescripts/subscriptions/bin/processTemplate.py : E501,E711,N802,N803,N806
-    /sitescripts/subscriptions/bin/updateMalwareDomainsList.py : A107,E501
-    /sitescripts/subscriptions/bin/updateSubscriptionDownloads.py : E501,F401
-    /sitescripts/subscriptions/bin/updateSubscriptionDownloadsCVS.py : E501
-    /sitescripts/subscriptions/combineSubscriptions.py : A102,A104,A105,A107,A206,A301,A302,E501,E713,E722
-    /sitescripts/subscriptions/knownIssuesParser.py : A107,A201,E501,E711,E713,N802,N806
-    /sitescripts/subscriptions/subscriptionParser.py : A102,A107,A206,A302,E501,E711,E722,N802,N803,N805
-    /sitescripts/subscriptions/test/test_updateMalwareDomainsList.py : D400,D401
-    /sitescripts/subscriptions/web/fallback.py : A107,A206,A301,E501,F401,N802,N806
-    /sitescripts/templateFilters.py : A107,A112,A206,E501,E711,F401,F841,N802,N803,N806,W504
-    /sitescripts/testpages/web/sitekey_frame.py : A107
-    /sitescripts/urlfixer/bin/forceDomains.py : A206,D205,D400,E501,N802
-    /sitescripts/urlfixer/bin/topDomains.py : A206,D205,D400,E501,E711,F401,N802,W504
-    /sitescripts/urlfixer/web/submitData.py : A206,E501,E711,F401,F841,N802,N806
-    /sitescripts/utils.py : A107,A301,D200,D202,D205,D208,D400,D401,E501,N801,N802,N806
-    /sitescripts/web.py : A107,E501,N802,W504
-    /multiplexer.py : A107,E501
+    sitescripts/content_blocker_lists/bin/generate_lists.py : A107,E501
+    sitescripts/crashes/web/submitCrash.py : A302,E501,E711,F401,N802,N806
+    sitescripts/crawler/bin/import_sites.py : A105,A206,E501
+    sitescripts/crawler/web/crawler.py : A107,A108,A206,E501
+    sitescripts/extensions/bin/createNightlies.py : A102,A104,A107,A108,A302,D200,D202,D205,D208,D400,D401,D403,E501,E722,F841,N802,N806,N812,W504,N813
+    sitescripts/extensions/bin/updateUpdateManifests.py : A107,A206,D200,D202,D205,D400,D401,D403,E501,N802,N806
+    sitescripts/extensions/test/conftest.py : D200,D400
+    sitescripts/extensions/test/test_createNightlies.py : D400
+    sitescripts/extensions/test/test_updateManifests.py : D401
+    sitescripts/extensions/utils.py : A107,A206,A301,A302,D200,D202,D204,D205,D208,D400,D401,D403,E501,E711,E722,F401,N802,N803,N805,N806,W504,N815
+    sitescripts/extensions/web/adblockbrowserUpdates.py : A107,E501,E722
+    sitescripts/extensions/web/downloads.py : E501,E722,F401
+    sitescripts/formmail/web/formmail.py : E722
+    sitescripts/formmail/test/test_formmail.py : D210,D400,D401
+    sitescripts/hg/bin/irchook.py : A104
+    sitescripts/hg/bin/update_issues.py: W504
+    sitescripts/hg/test/update_issues.py : N802
+    sitescripts/management/bin/generateHgAuth.py : A107,E501,E711
+    sitescripts/management/bin/generateNotifications.py : A301,E501
+    sitescripts/management/bin/installChanges.py : A102,A107,E501,E713,N802,N803,N806,N816
+    sitescripts/management/bin/start_services.py : A107,E501
+    sitescripts/notifications/parser.py : A101,A102,A107,E501,E713,E722
+    sitescripts/notifications/test/notification.py : E501
+    sitescripts/notifications/test/parser.py : A107
+    sitescripts/notifications/web/notification.py : A101,A107,E501
+    sitescripts/reports/bin/mailDigests.py : A102,A104,A107,A201,A302,E501,E711,F401,N802,N806,N816
+    sitescripts/reports/bin/parseNewReports.py : A107,A108,A112,A201,A206,A302,E501,E711,E722,F401,N802,N803,N806,N816
+    sitescripts/reports/bin/processReports.py : E501,F401,N802,N806
+    sitescripts/reports/bin/removeOldReports.py : E501,N802
+    sitescripts/reports/bin/removeOldUsers.py : E501,N802
+    sitescripts/reports/bin/updateDigests.py : A201,A301,A302,E501,E713,F401,N802,N806,N816
+    sitescripts/reports/bin/updateSubscriptionList.py : A302,E501,E711,N802
+    sitescripts/reports/utils.py : A206,A302,E501,E711,N802,N803,N806
+    sitescripts/reports/web/showDigest.py : A206,A301,A302,E501,F401,N802,N806
+    sitescripts/reports/web/showUser.py : A301,A302,E501,E711,N802
+    sitescripts/reports/web/submitReport.py : A301,A302,E501,F401,N802,N806
+    sitescripts/reports/web/updateReport.py : A301,E501,E711,E722,F401,N802,N806
+    sitescripts/submit_email/web/submit_email.py : E501
+    sitescripts/subscriptions/bin/generateReport.py : A104,A107,A201,A301,E501,E713,F401,N802,N803,N806,N816
+    sitescripts/subscriptions/bin/processTemplate.py : E501,E711,N802,N803,N806,N816
+    sitescripts/subscriptions/bin/updateMalwareDomainsList.py : A107,E501
+    sitescripts/subscriptions/bin/updateSubscriptionDownloads.py : E501,F401
+    sitescripts/subscriptions/bin/updateSubscriptionDownloadsCVS.py : E501
+    sitescripts/subscriptions/combineSubscriptions.py : A102,A104,A105,A107,A206,A301,A302,E501,E713,E722
+    sitescripts/subscriptions/knownIssuesParser.py : A107,A201,E501,E711,E713,N802,N806,N816
+    sitescripts/subscriptions/subscriptionParser.py : A102,A107,A206,A302,E501,E711,E722,N802,N803,N805,N815
+    sitescripts/subscriptions/test/test_updateMalwareDomainsList.py : D400,D401
+    sitescripts/subscriptions/web/fallback.py : A107,A206,A301,E501,F401,N802,N806
+    sitescripts/templateFilters.py : A107,A112,A206,E501,E711,F401,F841,N802,N803,N806,W504
+    sitescripts/testpages/web/sitekey_frame.py : A107
+    sitescripts/urlfixer/bin/forceDomains.py : A206,D205,D400,E501,N802
+    sitescripts/urlfixer/bin/topDomains.py : A206,D205,D400,E501,E711,F401,N802,W504
+    sitescripts/urlfixer/web/submitData.py : A206,E501,E711,F401,F841,N802,N806
+    sitescripts/utils.py : A107,A301,D200,D202,D205,D208,D400,D401,E501,N801,N802,N806,N816
+    sitescripts/web.py : A107,E501,N802,W504
+    multiplexer.py : A107,E501
+    multiplexer.fcgi : N816
 
 [testenv]
 basepython=python2
@@ -83,8 +84,7 @@
     jinja2
     pycrypto
     pysed
-    flake8
-    flake8-per-file-ignores>=0.4
+    flake8>=3.7.0
     flake8-docstrings
     flake8-commas
     pep8-naming
