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