1、邮件相关协议
(1)SMTP
SMTP(Simple Mail Transfer Protocol),简单邮件传输协议(25号端口)。它是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转。属于“推送”协议
(2)IMAP
IAMP(Internet Mail Access Protocol),交互式邮件访问协议,是一个应用层协议(143端口)。用来从本地邮件客户端访问远程服务器上的邮件。属于“拉取”协议。
(3)P0P3
P0P3(Post Office Protocol3)的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(110端口)。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。属于“拉取”协议。
注:IMAP和POP3
两者均为“拉取”型协议,负责从邮件服务器中下载邮件。
- IMAP具备摘要浏览功能,可预览部分摘要,再下载整个邮件
- IMAP为双向协议,客户端操作可反馈给服务器
- POP3必须下载全部邮件,无摘要功能
- POP3为单向协议,客户端操作无法同步服务器
2、Django发邮件
Django中配置邮件功能,主要为SMTP协议,负责发邮件。原理如下:
- 给Django授权一个邮箱
- Django用该邮箱给对应收件人发送邮件
- django.core.mail封装了电子邮件的自动发送SMTP协议
例:授权步骤
登录QQ,修改QQ邮箱==》设置==》账户==》“POP3/IMAP…服务”
3、Django配置
(1)settings.py配置
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 = '******' # qq邮箱中发短信后得到的qq邮箱授权码
EMAIL_USE_TLS = False # 与smtp服务器通信时,是否启动TLS链接(安全链接)默认False
(2)函数调用
from django.core import mail
mail.send_mail(
subject, # 题目
message, # 消息内容
from_email, # 发送者(当前配置邮箱)
recipient_list=[‘xxx@qq.com’] # 接收者邮件列表
)
例:邮件告警
(a)settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'middleware.mymiddleware.MyMW',
# 'middleware.mymiddleware.MyMW2',
'middleware.mymiddleware.ExceptionMW',
]
……
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 = '******' # qq邮箱中发短信后得到的qq邮箱授权码
EMAIL_USE_TLS = False # 与smtp服务器通信时,是否启动TLS链接(安全链接)默认False
# 自定义邮件发送地址
EX_EMAIL = ['xxx@qq.com']
(b)middleware.py
class ExceptionMW(MiddlewareMixin):
def process_exception(self, reqeust, exception):
print(exception)
print(traceback.format_exc())
mail.send_mail(subject='mysite3报错', message=traceback.format_exc(), from_email='1039429901@qq.com', recipient_list=settings.EX_EMAIL)
return HttpResponse('网页繁忙')
(c)views.py
@csrf_exempt
def test_upload(request):
test # 错误测试
if request.method == 'GET':
return render(request, 'test_upload.html')
elif request.method == 'POST':
title = request.POST['title']
myfile = request.FILES['myfile']
Content.objects.create(title=title, picture=myfile)
return HttpResponse('--上传文件成功--')
(d)urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('test_upload', views.test_upload),
]
访问:http://192.168.28.128:8000/test_upload
邮件:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)