diff --git a/pyquarantine/__init__.py b/pyquarantine/__init__.py index 7472c63..011e63a 100644 --- a/pyquarantine/__init__.py +++ b/pyquarantine/__init__.py @@ -296,6 +296,9 @@ class ModifyMilter(Milter.Base): f"current template variables: {self.msginfo['vars']}") if milter_action is not None: break + elif not self.msginfo["rcpts"]: + milter_action = ("DISCARD", None) + break if milter_action is None: self._replacebody() @@ -303,6 +306,7 @@ class ModifyMilter(Milter.Base): action, reason = milter_action if action == "ACCEPT": self._replacebody() + return Milter.ACCEPT elif action == "REJECT": self.setreply("554", "5.7.0", reason) return Milter.REJECT diff --git a/pyquarantine/storage.py b/pyquarantine/storage.py index 40a66b3..aac45fe 100644 --- a/pyquarantine/storage.py +++ b/pyquarantine/storage.py @@ -395,7 +395,7 @@ class Quarantine: self._milter_action = None if "milter_action" in cfg["args"]: self._milter_action = cfg["args"]["milter_action"].upper() - assert self._milter_action in ["ACCEPT", "REJECT"], \ + assert self._milter_action in ["ACCEPT", "REJECT", "DISCARD"], \ f"invalid milter_action '{cfg['args']['milter_action']}'" self._reason = None @@ -513,5 +513,6 @@ class Quarantine: if self._milter_action is not None: milter.delrcpt(rcpts) - if not milter.msginfo["rcpts"]: + if self._milter_action in ["ACCEPT", "REJECT"] and \ + not milter.msginfo["rcpts"]: return (self._milter_action, self._reason)