|  | @@ -1,3 +1,4 @@
 | 
											
												
													
														|  | 
 |  | +import logging
 | 
											
												
													
														|  |  import smtplib
 |  |  import smtplib
 | 
											
												
													
														|  |  from email.mime.multipart import MIMEMultipart
 |  |  from email.mime.multipart import MIMEMultipart
 | 
											
												
													
														|  |  from email.mime.text import MIMEText
 |  |  from email.mime.text import MIMEText
 | 
											
										
											
												
													
														|  | @@ -13,15 +14,30 @@ class SMTPClient:
 | 
											
												
													
														|  |          self._use_tls = use_tls
 |  |          self._use_tls = use_tls
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def send(self, mail: dict):
 |  |      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()
 |