12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import logging
- import smtplib
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- class SMTPClient:
- def __init__(
- self, server: str, port: int, username: str, password: str, _from: str, use_tls=False, opportunistic_tls=False
- ):
- self.server = server
- self.port = port
- self._from = _from
- self.username = username
- self.password = password
- self.use_tls = use_tls
- self.opportunistic_tls = opportunistic_tls
- def send(self, mail: dict):
- smtp = None
- try:
- if self.use_tls:
- if self.opportunistic_tls:
- smtp = smtplib.SMTP(self.server, self.port, timeout=10)
- smtp.starttls()
- else:
- smtp = smtplib.SMTP_SSL(self.server, self.port, timeout=10)
- else:
- smtp = smtplib.SMTP(self.server, self.port, timeout=10)
- if self.username and self.password:
- smtp.login(self.username, self.password)
- msg = MIMEMultipart()
- msg["Subject"] = mail["subject"]
- msg["From"] = self._from
- msg["To"] = mail["to"]
- msg.attach(MIMEText(mail["html"], "html"))
- smtp.sendmail(self._from, mail["to"], msg.as_string())
- except smtplib.SMTPException as e:
- logging.exception(f"SMTP error occurred: {str(e)}")
- raise
- except TimeoutError as e:
- logging.exception(f"Timeout occurred while sending email: {str(e)}")
- raise
- except Exception as e:
- logging.exception(f"Unexpected error occurred while sending email: {str(e)}")
- raise
- finally:
- if smtp:
- smtp.quit()
|