diff --git a/hc/api/admin.py b/hc/api/admin.py
index 9679a591..760ebd6e 100644
--- a/hc/api/admin.py
+++ b/hc/api/admin.py
@@ -135,7 +135,7 @@ class LargeTablePaginator(Paginator):
                 [self.object_list.query.model._meta.db_table],
             )
             return int(cursor.fetchone()[0])
-        except:
+        except Exception:
             return 0
 
     @cached_property
diff --git a/hc/api/tests/test_smtpd.py b/hc/api/tests/test_smtpd.py
index 4363af7e..b66e8cec 100644
--- a/hc/api/tests/test_smtpd.py
+++ b/hc/api/tests/test_smtpd.py
@@ -19,21 +19,21 @@ From: "User Name" <username@gmail.com>
 To: "John Smith" <john@example.com>
 Subject: %s
 MIME-Version: 1.0
-Content-Type: multipart/alternative; boundary="=-eZCfVHHsxj32NZLHPpkbTCXb9C529OcJ23WKzQ=="
+Content-Type: multipart/alternative; boundary="marker"
 
---=-eZCfVHHsxj32NZLHPpkbTCXb9C529OcJ23WKzQ==
+--marker
 Content-Type: text/plain; charset=utf-8
 Content-Transfer-Encoding: 7bit
 
 Plain text here
 
---=-eZCfVHHsxj32NZLHPpkbTCXb9C529OcJ23WKzQ==
+--marker
 Content-Type: text/html; charset=utf-8
 Content-Transfer-Encoding: 8bit
 
 %s
 
---=-eZCfVHHsxj32NZLHPpkbTCXb9C529OcJ23WKzQ==--
+--marker--
 """.strip()
 
 
diff --git a/hc/front/validators.py b/hc/front/validators.py
index 76ff0b64..ce3d7a00 100644
--- a/hc/front/validators.py
+++ b/hc/front/validators.py
@@ -3,7 +3,7 @@ from __future__ import annotations
 from datetime import datetime
 from urllib.parse import urlsplit, urlunsplit
 
-from cronsim import CronSim
+from cronsim import CronSim, CronSimError
 from django.core.exceptions import ValidationError
 from django.core.validators import URLValidator
 
@@ -41,7 +41,7 @@ class CronExpressionValidator(object):
             it = CronSim(value, datetime(2000, 1, 1))
             # Can it calculate the next datetime?
             next(it)
-        except:
+        except (CronSimError, StopIteration):
             raise ValidationError(message=self.message)
 
 
diff --git a/hc/lib/jsonschema.py b/hc/lib/jsonschema.py
index 4f8af7a1..47f77e4f 100644
--- a/hc/lib/jsonschema.py
+++ b/hc/lib/jsonschema.py
@@ -9,7 +9,7 @@ from __future__ import annotations
 import re
 from datetime import datetime
 
-from cronsim import CronSim
+from cronsim import CronSim, CronSimError
 
 from hc.lib.tz import all_timezones
 
@@ -29,16 +29,16 @@ def validate(obj, schema, obj_name="value"):
         if "pattern" in schema and not re.match(schema["pattern"], obj):
             raise ValidationError(f"{obj_name} does not match pattern")
         if schema.get("format") == "cron":
-            try:
-                # Does it have 5 components?
-                if len(obj.split()) != 5:
-                    raise ValueError()
+            # Does it have 5 components?
+            if len(obj.split()) != 5:
+                raise ValidationError(f"{obj_name} is not a valid cron expression")
 
+            try:
                 # Does cronsim accept the schedule?
                 it = CronSim(obj, datetime(2000, 1, 1))
                 # Can it calculate the next datetime?
                 next(it)
-            except:
+            except (CronSimError, StopIteration):
                 raise ValidationError(f"{obj_name} is not a valid cron expression")
         if schema.get("format") == "timezone" and obj not in all_timezones:
             raise ValidationError(f"{obj_name} is not a valid timezone")