程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django19:發送郵件

編輯:Python

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 = '[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

 郵件:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved