MailerModel.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import json
  2. from models.BaseModel import BaseModel
  3. from modules.Mailer import Mailer
  4. class MailerModel(BaseModel):
  5. parser_command = "mail"
  6. required_args = {
  7. "send": [["sender", "recipient", "subject", "body"]]
  8. }
  9. def __init__(
  10. self,
  11. sender=None,
  12. recipient=None,
  13. subject=None,
  14. body=None,
  15. context=None,
  16. **kwargs
  17. ):
  18. self.sender = sender
  19. self.recipient = recipient
  20. self.subject = subject
  21. self.body = body
  22. self.context = context
  23. def send(self):
  24. if self.context is not None:
  25. try:
  26. self.context = json.loads(self.context)
  27. except json.JSONDecodeError as e:
  28. return f"Invalid context JSON: {e}"
  29. else:
  30. self.context = {}
  31. mailer = Mailer(
  32. smtp_host="postfix-mailcow",
  33. smtp_port=25,
  34. username=self.sender,
  35. password="",
  36. use_tls=True
  37. )
  38. res = mailer.send_mail(
  39. subject=self.subject,
  40. from_addr=self.sender,
  41. to_addrs=self.recipient.split(","),
  42. template=self.body,
  43. context=self.context
  44. )
  45. return res
  46. @classmethod
  47. def add_parser(cls, subparsers):
  48. parser = subparsers.add_parser(
  49. cls.parser_command,
  50. help="Send emails via SMTP"
  51. )
  52. parser.add_argument("object", choices=list(cls.required_args.keys()), help="Action to perform: send")
  53. parser.add_argument("--sender", required=True, help="Email sender address")
  54. parser.add_argument("--recipient", required=True, help="Email recipient address (comma-separated for multiple)")
  55. parser.add_argument("--subject", required=True, help="Email subject")
  56. parser.add_argument("--body", required=True, help="Email body (Jinja2 template supported)")
  57. parser.add_argument("--context", help="Context for Jinja2 template rendering (JSON format)")