django发送邮件
-
协议:
- SMTP协议:简单邮件传输协议(25号端口),负责发邮件,属于推送协议。
- IMAP协议:交互式邮件访问协议(143号端口),负责收邮件,属于拉取协议。
- POP3也是负责收邮件的(110号端口),也属于拉取协议
- IMAP和POP3都属于拉取型协议,负责从邮件服务器中下载邮件:
- IMAP具备摘要浏览功能,可预览部分摘要,再下载整个邮件。IMAP是双向协议,客户端操作可反馈给服务器。
- POP3必须下载全部邮件,没有摘要功能,是单向协议,客户端操作无法同步服务器。
-
Django主要负责发邮件,充当邮件客户端的身份,django中配置邮件功能,主要是SMTP协议。负责发邮件
-
原理:
- 给Django授权一个邮箱
- Django用该邮箱给对应收件人发送邮件
- django.core.mail中封装了电子邮件的自动发送SMTP协议。
-
授权步骤:以QQ邮箱为例:
- 登录qq邮箱,上方有个设置,点进去之后上边菜单栏有个账户,找到有SMTP的那个服务,打开。会有发短信息的提示,按照流程一步步来就ok,最后拿到一个授权码,先存下来,后边用。
- 进行django配置:
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST='smtp.qq.com' #腾讯qq邮箱SMTP服务器地址 EMAIL_PORT=25 #SMTP服务的端口号 EMAIL_HOST_USER='xxxx@qq.com' #发送邮件的qq邮箱 EMAIL_HOST_PASSWORD='xxxxxxx' #在qq邮箱->设置->账户->“POP3/IMAP..服务”中得到的第三方登录qq邮箱的授权码 EMAIL_USE_TLS=False #与SMTP服务器通信时,是否启动TLS链接(安全链接),默认是False
-
函数调用:到django shell中进行调试:(shell会加载settings中的配置项)
from django.core import mail mail.send_mail( subject='', #题目(字符串) message='', #消息内容(字符串) from_email='', #发送者(当前配置邮箱)(字符串) recipient_list=['xxx@qq.com'], #收件人(数组) )
-
-
练习:用中间件实现抓取视图函数的异常,并以邮件的形式将异常信息发送给指定联系人,
- 要求:
- 邮件主题:mysite7异常警告
- 内容:要求带有异常信息
- 收件人可灵活配置
- 实现:
- 在项目文件夹下新建一个python 包"middleWare",创建一个文件"mymiddleware.py"用于写中间件的类,写完中间件之后记得在settings中注册.
# 写完之后记得注册 from django.http import HttpResponse from django.utils.deprecation import MiddlewareMixin import traceback from django.core import mail from django.conf import settings class ExceptionMiddleWare(MiddlewareMixin): def process_exception(self,request,exception): #终端会打印错误信息 print(exception) print(traceback.format_exc()) #将异常信息通过邮件发送给settings中配置的收件人 mail.send_mail(subject='mysite7报错了',message=traceback.format_exc(),from_email='xxxxxxxx@qq.com',recipient_list=settings.EX_EMAIL_LIST) return HttpResponse('--当前网页忙碌--')
- 随便找个视图函数添加个小错误,比如加上个未被定义的变量名a,现在去访问这个url(先确保项目启动起来了),就会弹出响应’–当前网页忙碌–’.
- 收件人能够自定义,那么就在settings中自己定义个变量
EX_EMAIL_LIST=['xxxx@qq.com']
,不过用到配置文件得先进行引入from django.conf import settings
- 终端中也会打印错误信息
name 'a' is not defined Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/xxxxx/day08/mysite7/mysite7/views.py", line 59, in test_upload a NameError: name 'a' is not defined
- 在项目文件夹下新建一个python 包"middleWare",创建一个文件"mymiddleware.py"用于写中间件的类,写完中间件之后记得在settings中注册.
- 这样邮箱中就能收到带有异常信息的邮件了
- 要求: