通过Django发送邮件非常的简单,在Python中已经内置了一个smtplib邮件发送模块,Django在此基础上进行了简单地封装,我们可以在Django的环境中方便的发送邮件。大部分邮件发送成功主要是邮件的参数配置,本文以常用的126邮箱和QQ邮箱为例介绍Django发送邮件的配置,其他提供smtp邮件服务的邮箱都是一样的。
一、Django邮件配置
用Django发送邮件需要告诉你的邮件服务器相应的参数配置,需要在settings.py中进行配置好。
默认情况下,使用配置文件中的EMAIL_HOST
和EMAIL_PORT
设置SMTP服务器主机和端口,EMAIL_HOST_USER
和
EMAIL_HOST_PASSWORD
是用户名和密码。如果设置了EMAIL_USE_TLS和EMAIL_USE_SSL,它们将控制是否使用相应的加密链接。
典型的配置如下:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.126.com' #126邮箱的邮箱服务地址
EMAIL_PORT = 25 #端口,大部分都是默认25
EMAIL_HOST_USER = 'yourmail@126.com' #这里是你的邮箱账号
EMAIL_HOST_PASSWORD = 'yourpassword' #注意这里不能用你邮箱账号的密码,而要用申请的设备授权码。
这里要注意的两个地方,一个是EMAIL_PORT端口、一个是EMAIL_HOST_PASSWORD密码。
端口一般默认是25,但有些邮箱改了默认端口或需要用加密链接465、578端口,可以从邮件服务商查到。
密码以前可以用邮箱账号密码,但这几年随着安全要求的提高,大部分主要的邮件服务提供商都要用申请的授权码进一步加强安全系数。
这里介绍这些关键的信息如何在邮件服务商获取。
注意EMAIL_HOST_PASSWORD这里不能用你邮箱账号的密码,而要用申请的设备授权码。
126邮箱
进入到邮箱配置界面,点击“POP3/SMTP/IMAP”,注意要开启SMTP。
授权码是用于登录第三方邮件客户端的专用密码,点击"新增授权密码",降会弹出一个账号安全验证,扫描后可以快速的发短信。
用你的注册手机发完短信后点击"我已发送"就会弹出一个授权码的窗口,要把这个授权码记下来,这个窗口只显示一次。
QQ邮箱
进入到QQ邮箱WEB界面后点击“设置”,点击“邮件设置”的“账户”页签拉到“账户安全”处就可以看到相关的SMTP服务信息
点击“生成授权码”,将弹出验证密保的界面。
根据提示发送短信后,点击我已发送,将会弹出生成授权码的界面显示授权码。
如果需要SSL加密方式,可以进一步查看服务商的SMTP服务说明
如QQ邮箱的服务说明 https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=331
看到使用SSL,端口号是465或587
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' #QQ邮箱的smtp服务器
EMAIL_PORT = 465 #端口为465或587
EMAIL_USE_SSL = True #SSL加密方式设置为True
EMAIL_HOST_USER = 'yourmail@qq.com' #这里是你的邮箱账号
EMAIL_HOST_PASSWORD = 'yourpassword' #注意这里不能用你邮箱账号的密码,而要用申请的设备授权码。
二、测试发送邮件
可以用django的环境在shell中测试。
python manage.py shell
from django.core.mail import send_mail
send_mail('test','this is test mail','yourmail@qq.com',['yourmail@126.com','yormail@qq.com'])
如果反回1就表示发送成功了, 查收邮件到达。
如果发送不成功,请仔细核对邮箱服务的相关配置,一般来说与django无关。