发送邮件
```python
@classmethod
def create(cls, title, level, content, user, url = None, category = None,
task_id = None, Email = False, SMS=False):
"""
添加通知
:param user: 接收用户
:param title: 通知标题
:param level: 紧急程度等级:0 (默认)一般;1 紧急;2 非常紧急
:param content: 内容
:param url: 跳转链接,用户点击通知链接后跳转的页面,页面地址可以和前端要
:param category: 实体类型
:param task_id: 实体id
:param Email: 本次通知是否发送email邮件,当全局邮件开关关闭时,该参数不生效。
全局邮件发送开关:settings.py的EMAIL_SWITCH,只有该值设置为True时,
create函数的email才生效。
:param SMS: 是否发送短信提醒
:return:空
"""
notice = Notice.objects.create(receiver = user, title = title, urgency_level=level, content = content)
if url :
notice.url = url
if category is not None:
notice.category = category
if task_id :
notice.task_id = task_id
if url or category or task_id:
notice.save()
if Email:
if user.email:
emailex = EmailEx()
# send_sync 为自定义的一个方法
emailex.send_sync(title, content, user.email)
send_sync 方法
def send_sync(self, subject, content, receiver):
"""
异步发送
:param subject: title
:param content:
:param receiver:
:return:
"""
# 这里启动一个线程,调用自定义的send_html_email一个方法
# args 是将这些参数传递到send_html_email中
threading.Thread(target=self.send_html_email, args=(subject, content, receiver)).start()
# 这里将是一个新的线程来调用这个接口来实现发送邮件
def send_html_email(self, Subject,content,receiver):
if settings.EMAIL_SWITCH:
sender = settings.SMTP_SERVER_USER
themsg = MIMEMultipart()
themsg['Subject'] = Subject
if isinstance(receiver, list):
themsg['To'] = ', '.join(receiver)
else:
themsg['To'] = receiver
themsg['From'] = settings.PROJECTNAME
themsg['Date'] = utils.formatdate(localtime = 1)
themsg['Message-ID'] = utils.make_msgid()
msgAlternative = MIMEMultipart('alternative')
themsg.attach(msgAlternative)
msgText = MIMEText(content,'html', 'utf-8')
msgAlternative.attach(msgText)
themsgtest = themsg.as_string()
# send the message
server = smtplib.SMTP_SSL(settings.SMTP_SERVER, settings.SMTP_PORT)
server.login(settings.SMTP_SERVER_USER, settings.SMTP_SERVER_PWD)
server.sendmail(sender, receiver, themsgtest)
server.quit()#SMTP.quit()
[
](https://www.runoob.com/python3/python3-smtp.html)