|
@@ -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()
|