前言
最近在做公司運維平臺中一個有關(guān)服務(wù)器權(quán)限申請的 app,其中在申請進度狀態(tài)被改變時需要郵件形式提醒有關(guān)人員及時對記錄進行近一步操作,以推進審核流程。
Django 中發(fā)送郵件
Django 中為我們提供了發(fā)送郵件的接口,在 django.core.mail
模塊中,是對 Python smtplib 做了一層輕度的封裝,使其更易使用在 Django 項目中。
send_mail
Django 中最簡單的發(fā)送郵件的方法是使用 django.core.mail.send_mail
。
以下是4個必要參數(shù):
subject:字符串,郵件主題
message:字符串,郵件內(nèi)容
from_email:字符串,發(fā)件郵箱
recipient_list:字符串列表,收件人列表
可選參數(shù)(未包含全部)
fail_silently:一個布爾值(True 或 False),如果是 False,當(dāng) send_mail 失敗會引發(fā) smtplib.SMTPException
系列異常,所有可能出現(xiàn)的異常都屬于 smtplib.SMTPException
的子類。
auth_user:用于 smtp 服務(wù)器驗證,如果不給定此參數(shù),則使用項目 setting.py 中設(shè)定的 EMAIL_HOST_USER
的值。
auth_password:用于 smtp 服務(wù)器驗證,如果不給定此參數(shù),則使用項目 setting.py 中設(shè)定的 EMAIL_HOST_PASSWORD
的值。
總結(jié)
有了上面的知識就可以使用 Django 來發(fā)送簡單的郵件給用戶了,當(dāng)然還有很多高階的功能,需要額外的參數(shù),或者是其他方法去實現(xiàn),會在日后需要的時候去深入的,最后放一段我項目中的 setting.py 設(shè)置,和在 view 中簡單使用 send_mail
方法發(fā)送郵件的代碼片段。
File:project/setting.py
# 郵件部分設(shè)置
EMAIL_HOST = 'smtp.163.com' # smtp 地址(這里需要注意,如果你和我一樣使用 163 郵箱的話,默認(rèn) smtp 功能是關(guān)閉的,需要去設(shè)置開啟,并生成一個一次性密碼用于連接 smtp 服務(wù))
EMAIL_HOST_USER = 'xxxxxxxxxx@163.com' # 用戶
EMAIL_HOST_PASSWORD = 'xxxxxxxxxx' # 密碼
EMAIL_SUBJECT_PREFIX = u'[美圖權(quán)限申請系統(tǒng)]' # 為郵件Subject-line前綴,默認(rèn)是'[django]'
EMAIL_USE_TLS = True # 與SMTP服務(wù)器通信時,是否啟動TLS鏈接(安全鏈接)。默認(rèn)是false
File:app/views.py
from django.core.mail import send_mail
from smtplib import SMTPException
......
......
try:
send_mail(
subject=u"xxxxxxxxxx", message=u"通知:xxxxxxxxxx",
from_email='xxxxxxxxxx@163.COM', recipient_list=[mail_adder, ], fail_silently=False,
)
except SMTPException, e:
# 此處記錄日志
# 返回相關(guān)錯誤信息,例如:return HttpResponse(error)