28、Django-发送邮件

SMTP全称是(Simple Mail Transfer Protocol)即简单邮件传输协议(端口是25)
  - 他是一组用于从源地址到目的地址传输邮件的规范、通过它来控制邮件的中转
    - 属于推送协议 - 负责发送
    
IMAP-邮件相关协议(Internet Mail Access Protocol)即交互式邮件访问协议、是一个应用层协议、端口是143
  - 用来从本地邮件客户端(Outlook Exporess、Foxmail、Mzzilla Thunderbird)访问远程服务器上的邮件
    - 属于拉取协议 - 负责收邮件
    
POP3-邮件相关协议(Post Office Protocol 3)即邮件协议的第三个版本、是TCP/IP协议族中的一员、端口是110
  - 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
    - 属于拉取协议 - 负责收邮件
    
    
IMAP和POP3都属于拉取型协议、负责从邮件服务器中下载邮件
 - IMAP具有摘要浏览器的功能、可预览部分摘要、再下载整个邮件
  - IMAP为双向协议、客户端操作可反馈给服务器
 - POP3必须下载全部邮件、无摘要功能
  - POP3为单向协议、客户端操作无法同步服务器

 

 

 

生成QQ邮箱的授权码:

 

邮箱的配置
setting.py
-------------------------------------------
#邮箱配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'   # 发送邮件后端配置、邮件引擎
EMAIL_HOST = 'smtp.qq.com'      # 发送邮件服务器: smtp.qq.com,
EMAIL_PORT = 587               #发送邮件端口,端口号465或587
EMAIL_HOST_USER = '303977143@qq.com'    # 发件人邮箱
EMAIL_HOST_PASSWORD = 'sszcuxnizxxx'   # 授权码
EMAIL_USE_TLS = False    # 是否使用TLS加密,qq邮箱需要使用
--------------------------------------------------------

中间件
emilmiddleware.py
------------------------------------------------------
import traceback

from django.core import mail
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
from django.conf import settings

class ExceptionMW(MiddlewareMixin):
    def process_exception(self, request, exception):
        print(exception)

        print(traceback.format_exc())
        mail.send_mail(subject='异常信息', message=traceback.format_exc(), from_email='303977143@qq.com', recipient_list=settings.EX_MAIL)
        return HttpResponse('-- 当前网页有点忙 ---')
    
------------------------------------------------------------------
views.py
----------------------------------------------
# Create your views here.

#访问http://127.0.0.1:8000/test_csv
#自动下载test.csv文件
def test_csv(request):

    # 创建响应对象 、设置响应类型
    response = HttpResponse(content_type='text/csv') # Content-Type、修改响应头
    ##添加特殊的响应头、只要有这个响应头浏览器就会弹出下载
    #attachment: 是告诉浏览器,这个文件要下载下来
    #filename: 是告诉浏览器,文件名是什么
    response['Content-Disposition'] = 'attachment; filename="test.csv"'

    all_data = ['a', 'b', 'c', 'd'] # 所有数据
    # 创建csv写入对象
    writer = csv.writer(response)
    writer.writerow(all_data)   # 写入数据

    return response


from upload_app import models
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
#文件上传
def upload_file(request):
    if request.method == 'GET':
        a        #制造错误
        return render(request, 'upload_file.html')

------------------------------------------------------

urls.py
--------------------------------
from django.contrib import admin
from django.urls import path
from download_csv import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test_csv/', views.test_csv),
    path('upload_file/', views.upload_file),
]

# 配置静态文件、媒体文件
#settings.MEDIA_URL:媒体文件访问路径
#settings.MEDIA_ROOT:媒体文件保存路径
#static():将媒体文件映射到访问路径
#当文件上传到服务器时,会自动将文件保存到MEDIA_ROOT指定的路径下
#访问图片:http://127.0.0.1:8000/media/picture/111.png
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
---------------------------------------------------------------

 

posted @ 2024-07-09 22:35  little小新  阅读(27)  评论(0编辑  收藏  举报