smtpx.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import email
  2. from email.message import Message
  3. from data import dataInstance
  4. def message_to_display(message: Message):
  5. result = ''
  6. if message.is_multipart():
  7. for sub_message in message.get_payload():
  8. result += message_to_display(sub_message)
  9. else:
  10. result = f"Content-type: {message.get_content_type()}\n" \
  11. f"{message.get_payload()}\n" + "*" * 76 + '\n'
  12. return result
  13. class CrazySrvHandler:
  14. dao = dataInstance
  15. async def handle_RCPT(self, server, session, envelope, address, rcpt_options):
  16. envelope.rcpt_tos.append(address)
  17. return '250 OK'
  18. async def handle_DATA(self, server, session, envelope):
  19. mail_from = envelope.mail_from
  20. rcpt_tos = envelope.rcpt_tos
  21. message: Message = email.message_from_bytes(envelope.content)
  22. content = message_to_display(message)
  23. subject = message['Subject']
  24. obj = {
  25. "from": mail_from,
  26. "to": rcpt_tos,
  27. "subject": subject,
  28. "content": content
  29. }
  30. self.dao.store_msg(obj)
  31. print(self.dao.read_from(obj['from']))
  32. return '250 Message accepted for delivery'