smtp.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import smtplib
  2. from .email import Email
  3. class Sender:
  4. def __init__(self, user: str, passwd: str, host="localhost", port=465, debug=False, ssl=True, start_ssl=False):
  5. self.host = host
  6. self.port = port
  7. self.user = user
  8. self.passwd = passwd
  9. self.debug = debug
  10. self.ssl = ssl
  11. self.start_ssl = False if ssl else start_ssl
  12. def send(self, msg: Email):
  13. if self.ssl:
  14. server = smtplib.SMTP_SSL(self.host, self.port)
  15. else:
  16. server = smtplib.SMTP(self.host, self.port)
  17. server.set_debuglevel(self.debug)
  18. if self.start_ssl:
  19. server.starttls()
  20. server.login(self.user, self.passwd)
  21. server.sendmail(msg.from_addr[1],
  22. [i[1] for i in msg.to_addr + msg.cc_addr + msg.bcc_addr],
  23. msg.as_string())
  24. server.quit()
  25. def check_login(self):
  26. if self.ssl:
  27. server = smtplib.SMTP_SSL(self.host, self.port)
  28. else:
  29. server = smtplib.SMTP(self.host, self.port)
  30. server.set_debuglevel(self.debug)
  31. if self.start_ssl:
  32. server.starttls()
  33. try:
  34. server.login(self.user, self.passwd)
  35. server.quit()
  36. except (smtplib.SMTPHeloError, smtplib.SMTPAuthenticationError,
  37. smtplib.SMTPNotSupportedError, smtplib.SMTPException):
  38. return False
  39. return True