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)
---------------------------------------------------------------