瀏覽代碼

fix: add timeout to SMTPClient to prevent worker blocking (#4352)

tags/0.6.9
Charles Zhou 1 年之前
父節點
當前提交
2eb468f885
沒有連結到貢獻者的電子郵件帳戶。
共有 1 個檔案被更改,包括 28 行新增12 行删除
  1. 28
    12
      api/libs/smtp.py

+ 28
- 12
api/libs/smtp.py 查看文件

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

Loading…
取消
儲存