| @@ -1,3 +1,4 @@ | |||
| import logging | |||
| import smtplib | |||
| from email.mime.multipart import MIMEMultipart | |||
| from email.mime.text import MIMEText | |||
| @@ -13,15 +14,30 @@ class SMTPClient: | |||
| self._use_tls = use_tls | |||
| def send(self, mail: dict): | |||
| smtp = smtplib.SMTP(self.server, self.port) | |||
| if self._use_tls: | |||
| smtp.starttls() | |||
| 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.username, mail['to'], msg.as_string()) | |||
| smtp.quit() | |||
| smtp = None | |||
| try: | |||
| smtp = smtplib.SMTP(self.server, self.port, timeout=10) | |||
| if self._use_tls: | |||
| smtp.starttls() | |||
| 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.error(f"SMTP error occurred: {str(e)}") | |||
| raise | |||
| except TimeoutError as e: | |||
| logging.error(f"Timeout occurred while sending email: {str(e)}") | |||
| raise | |||
| except Exception as e: | |||
| logging.error(f"Unexpected error occurred while sending email: {str(e)}") | |||
| raise | |||
| finally: | |||
| if smtp: | |||
| smtp.quit() | |||