CTFd--发邮件的坑

CTFd/utils.py中,smtp邮件服务器鉴权的函数为:

def get_smtp(host, port, username=None, password=None, TLS=None, SSL=None):
smtp = smtplib.SMTP(host, port)
smtp.ehlo()
if TLS:
    smtp.starttls()
    smtp.ehlo()
smtp.login(username, password)
return smtp

使用了smtplib.SMTP类,但是如果邮件服务器使用了SSL,则需要使用smtplib.SMTP_SSL类:

def get_smtp(host, port, username=None, password=None, TLS=None, SSL=None):
if SSL:
    smtp = smtplib.SMTP_SSL(host, port)
    smtp.ehlo()
elif TLS:
    smtp = smtplib.SMTP(host, port)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
smtp.login(username, password)
return smtp