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