草庐IT

30.django发送邮件

Suyuoa 2023-04-09 原文

目录

1  协议介绍

1.1  SMTP协议

1.2  IMAP

1.3  POP3

1.4  IMAP与POP3的区别

2  在Django使用

2.1  开通邮箱SMTP服务

2.2  配置settings.py

2.3  前端

2.4  视图

2.5  路由

2.6  使用

3  应用

3.1  将网站的错误发送给工作人员


发送邮件是网站的常见功能,比如需要邮箱验证登录状态的时候需要发送邮件,密码找回的时候需要发送邮件等等

1  协议介绍

1.1  SMTP协议

SMTP协议是推送(从服务端到客户端)协议,SMTM的全称是Simple Main Transfer Protocol(简单邮件传输协议),这个协议的服务一般在25号端口

1.2  IMAP

IMAP协议是拉取(从客户端到服务端)协议,比如你打开你的邮箱查看里面都有什么邮件,这个过程就是拉取。IMAP全称为Internet Mail Access Protocol(交互式邮件访问协议)。IMAP属于应用层协议,端口为143

1.3  POP3

POP3协议属于拉取协议。全称为Post Office Protocol 3(邮局协议的第三个版本),是TCP/IP协议族中的一员,端口为110

1.4  IMAP与POP3的区别

两者均为拉取型协议,区别如下

  • IMAP具有摘要功能,可以预览部分摘要在下载整个邮件。POP3必须下载全部邮件,无摘要功能
  • IMAP为双向协议,客户端操作可反馈给服务器。POP3为单向协议,客户端操作无法同步服务器

2  在Django使用

Django主要实现发邮件的功能,实现的流程是这样的

1.给Django授权一个邮箱

2.Django用该邮箱给对应收件人发送邮件

在django.core.mail封装了电子邮件自动发送的SMTP协议

2.1  开通邮箱SMTP服务

我们以qq邮箱为例,其余邮箱的设置方法也类似

点击账户

往下滚可以看到各种服务,django主要实现服务端给客户端发邮件,所以只要选一个带SMTP服务的就可以了,我开启的是POP3/SMTP服务

验证后会得到一个16位的授权码

2.2  配置settings.py

含义依次是

  • EMAIL_BACKEND 邮件引擎,这个就是写死的,可能会根据django版本不同有所改变
  • EMAIL_HOST 这个是使用邮箱的SMTP服务器地址,常见的服务器地址可以看一下这个 常用SMTP地址_huang_hai_an的博客-CSDN博客_smtp地址
  • EMAIL_PORT SMTP 这里是qq邮箱的SMTP服务端口号,基本都会用25号端口
  • EMAIL_HOTS_USER 你刚刚使用的qq邮箱
  • EMAIL_HOST_PASSWORD 上面qq邮箱对应的授权码,如果授权码忘了,在qq邮箱中把服务关了再开一遍会得到新的授权码
  • EMAIL_USE_TLS 是否启用TLS链接(安全链接),我们用False就行,这个看一下你的邮箱支不支持TLS,如果不支持你这写True加密,对面(qq)解不了

2.3  前端

一般来讲会有给用户写自己邮箱的页面,我们简单搞一下,文件名为send_email.html

  • input的type不一定为email,用text也行,我这里用email就是简单验证一下输入的内容

2.4  视图

subject是题目。message是内容。from_email是用谁发。recipient_list是发给谁,recipent_list是一个列表,可以发给多人。一般很少在服务端进行群发,也很少让用户自己写题目和消息内容

2.5  路由

2.6  使用

访问路由后写一个邮箱(可以发给自己),然后点击发送

之后会显示发送成功

打开邮箱后可以看到刚刚发送的邮件

3  应用

3.1  将网站的错误发送给工作人员

我们使用中间进行捕获错误,然后把错误信息发到工作人员的邮箱,以便后续对这些错误进行修改

我们定义一个中间件专门来做这个事情

然后在settings.py中注册这个中间件

一般我们不使用exception来获取错误信息,因为exception的错误信息太少,一般使用python内建的traceback的format_exc()方法,下面是两种报错信息的比较

发现一个异常后会自动发到邮箱

收件人一般会有多个邮箱,如果这多个邮箱有多次复用的地方,可以在settings.py中定义一个列表变量,然后from django.conf import settings,之后settings.列表变量名。进行复用

有关30.django发送邮件的更多相关文章

  1. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  2. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  3. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  4. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  5. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  6. ruby-on-rails - Ruby on Rails - 需要在每周的特定时间将消息发送到电子邮件 - 2

    我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用ruby​​onrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_

  7. ruby - 如何理解 Ruby 中的发送者和接收者? - 2

    我很难理解Ruby中sender和receiver的实际含义。它们一般是什么意思?到目前为止,我只是将它们理解为方法调用和获取其返回值的调用。但是,我知道我的理解还远远不够。谁能给我一个Ruby中发送者和接收者的具体解释? 最佳答案 面向对象中的一个核心概念是消息传递和早期概念化,这在很大程度上借鉴了计算的Actor模型。艾伦·凯(AlanKay)创造了面向对象一词并发明了最早的OO语言之一SmallTalk,他拥有voicedregretatusingatermwhichputthefocusonobjectsinsteadofo

  8. ruby - 动态扩展现有方法或覆盖 ruby​​ 中的发送方法 - 2

    假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入

  9. ruby-on-rails - 如何通过 POST 发送多个相同的键/参数? - 2

    如果我必须在一个HTTP请求中发送一堆post参数,所有这些参数都具有相同的名称,我该如何构建要发布的data对象?想象一个带有一些复选框的表单,它们都具有相同的name属性但具有不同的值(如果它们被选中):我想用ruby​​构建它(但它需要根据在表单上选择的内容动态创建):data={"color"=>"red","color"=>"green","color"=>"blue"}然后将数据发送到某个URL:Net::HTTP.post_form(url,data)我无法控制接收端,所以我必须发送它期望接收的参数。怎么办? 最佳答案

  10. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

随机推荐