Django有一系列内置的模块,提供了多种邮件发送的方法。
在实现邮件发送功能之前,需要对邮箱进行相关配置。以QQ邮箱为例
在QQ邮箱的设置中,在账户设置中找到POP3/SMTP服务,开启POP3/SMTP服务。
开启后会有一个授权密码,保存好,在开发过程中需要设置它
然后在项目的settings.py中添加邮箱的相关配置:
#邮箱配置
EMAIL_USE_SSL = True
#邮件服务器
EMAIL_HOST = 'smtp.qq.com'
#邮件服务器端口
EMAIL_PORT = 465
#发送邮箱的账号
EMAIL_HOST_USER = '1483199618@qq.com'
#SMTP服务密码
EMAIL_HOST_PASSWORD = 'yphwbadpnbvgjebe'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
配置完成后,就可以调用内置的邮件发送方法进行邮件发送了
1. send_mail
每次发送邮件都会建立一个新的连接,如果发送多封邮件,就需要建立多个连接
In [1]: from django.core.mail import send_mail
In [2]: from django.conf import settings
In [3]: from_email = settings.DEFAULT_FROM_EMAIL
In [4]: send_mail('Subject','content',from_email,['1483199618@qq.com'])
2. send_mass_mail
建立单个连接发送多封邮件,建立一次性发送多封邮件时,send_mass_mail 优于send_mail
In [5]: from django.core.mail import send_mass_mail
In [6]: msg1 = ('Subject','This is msg 1',from_email,['1483199618@qq.com'])
In [7]: msg2 = ('Subject','This is msg 2',from_email,['1483199618@qq.com'])
In [8]: send_mass_mail((msg1,msg2),fail_silently=False)
Out[8]: 2
3.EmailMultiAlternatives
比前面两者更为个性化,可以设置邮件正文内容为HTML格式,也可以添加附件,满足多方面的开发需求
In [9]: from django.core.mail import EmailMultiAlternatives
In [10]: content = '<p>这是一封<strong>重要的</strong>邮件</p>'
In [11]: msg = EmailMultiAlternatives('Subject',content,from_email,['1483199618@qq.com'])
#将正文设置为html
In [12]: msg.content_subtype = 'html'
#对正文内容进行补充
In [13]: msg.attach_alternative('<strong> This is from Django</strong>','text/html')
#添加附件
In [14]: msg.attach_file('/Users/huanghuan/Desktop/map.jpeg')
#发送
In [15]: msg.send()
4.User的email_user
另外,在Django自带的User类中,为方便实现找回密码,发送验证码给用户等,有一个内置的实例方法:email_user,它发送给的是User对象的email,即auth_user表中的email字段。首先获取到要发送的指定用户user,然后user.email_user('Subject','content)