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