SMTP(Simple Mail Transfer Protocol),簡單郵件傳輸協議(25號端口)。它是一組用於從原地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉。屬於“推送”協議
IAMP(Internet Mail Access Protocol),交互式郵件訪問協議,是一個應用層協議(143端口)。用來從本地郵件客戶端訪問遠程服務器上的郵件。屬於“拉取”協議。
P0P3(Post Office Protocol3)的簡稱,即郵局協議的第3個版本,是TCP/IP協議族中的一員(110端口)。本協議主要用於支持使用客戶端遠程管理在服務器上的電子郵件。屬於“拉取”協議。
注:IMAP和POP3
兩者均為“拉取”型協議,負責從郵件服務器中下載郵件。
Django中配置郵件功能,主要為SMTP協議,負責發郵件。原理如下:
例:授權步驟
登錄QQ,修改QQ郵箱==》設置==》賬戶==》“POP3/IMAP…服務”
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 騰訊QQ郵箱smtp服務器地址
EMAIL_PORT = 25 # smtp服務的端口號
EMAIL_HOST_USER = '[email protected]' # 發送郵件的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=[‘[email protected]’] # 接收者郵件列表
)
例:郵件告警
(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 = '[email protected]' # 發送郵件的qq郵箱
EMAIL_HOST_PASSWORD = '******' # qq郵箱中發短信後得到的qq郵箱授權碼
EMAIL_USE_TLS = False # 與smtp服務器通信時,是否啟動TLS鏈接(安全鏈接)默認False
# 自定義郵件發送地址
EX_EMAIL = ['[email protected]']
(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='[email protected]', 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
郵件: