diff --git a/pymodmilter/action.py b/pymodmilter/action.py index 10022bd..5daabde 100644 --- a/pymodmilter/action.py +++ b/pymodmilter/action.py @@ -131,6 +131,25 @@ class ActionConfig(BaseConfig): raise RuntimeError( f"{self['name']}: storage_type: invalid storage type") + elif self["type"] == "notify": + self["headersonly"] = False + + self.add_string_arg( + cfg, ["smtp_host", "envelope_from", "from", "subject", + "template"]) + self.add_int_arg(cfg, "smtp_port") + + if "embedded_imgs" in cfg: + assert isinstance(cfg["embedded_imgs"], list), \ + f"{self['name']}: embedded_imgs: invalid value, " \ + f"should be list" + for img in cfg["embedded_imgs"]: + assert isinstance(img, str), \ + f"{self['name']}: embedded_imgs: invalid entry, " \ + f"should be string" + + self["args"]["embedded_imgs"] = cfg["embedded_imgs"] + else: raise RuntimeError(f"{self['name']}: type: invalid action type") diff --git a/pymodmilter/base.py b/pymodmilter/base.py index 4eb91ae..2ec6a6f 100644 --- a/pymodmilter/base.py +++ b/pymodmilter/base.py @@ -104,6 +104,17 @@ class BaseConfig: f"{self['name']}: {arg}: invalid value, should be bool" self["args"][arg] = cfg[arg] + def add_int_arg(self, cfg, args): + if isinstance(args, str): + args = [args] + + for arg in args: + assert arg in cfg, \ + f"{self['name']}: mandatory parameter '{arg}' not found" + assert isinstance(cfg[arg], int), \ + f"{self['name']}: {arg}: invalid value, should be integer" + self["args"][arg] = cfg[arg] + class MilterMessage(MIMEPart): def replace_header(self, _name, _value, idx=None): diff --git a/pymodmilter/notify.py b/pymodmilter/notify.py index 0aefecc..2602d61 100644 --- a/pymodmilter/notify.py +++ b/pymodmilter/notify.py @@ -121,12 +121,12 @@ class EMailNotification(BaseNotification): self.subject = subject try: self.template = open(template, "r").read() - self.embedded_imgs = [] + self.embed_imgs = [] for img_path in embed_imgs: img = MIMEImage(open(img_path, "rb").read()) filename = basename(img_path) img.add_header("Content-ID", f"<{filename}>") - self.embedded_imgs.append(img) + self.embed_imgs.append(img) self.replacement_img = repl_img self.strip_images = strip_imgs @@ -297,7 +297,7 @@ class EMailNotification(BaseNotification): logger.debug("attaching notification_replacement_img") msg.attach(self.replacement_img) - for img in self.embedded_imgs: + for img in self.embed_imgs: logger.debug("attaching imgage") msg.attach(img)