Django實現發送郵件功能

最近用python寫了官網的后臺。官網的后臺功能比較簡單,一個多語言支持,一個聯系我們,即給公司發郵件的功能。多語言支持的方式寫在另一篇博客了。這里先來說一說Django的發送郵件功能。

其實python本身自帶了發送郵件的功能,Django在其基礎上進行了封裝,使其更加簡單易用。僅僅幾行代碼就可以實現發送郵件的功能。

但是在實際開發的時候,遇到了兩個大坑,折騰了3天才真正搞定,在這里做一個簡單的記錄和梳理,希望能幫其他小伙伴規避這些問題。

使用Django做發送郵件的功能前,首先要有一個支持smtp協議的郵箱并檢查設置。**在這里要控訴一下網易郵箱,163和126郵箱,都會強行把你要發送的郵件判定為垃圾郵件,從而阻止發送,所以這里不建議使用。最好使用企業郵箱,付費的真的比較靠譜。**我這里以騰訊企業郵箱作為示范:

1.登陸騰訊企業郵箱,進入設置--客戶端設置

2.確認SMTP服務是否開啟,如下圖:

3.若沒有開啟,記得開啟。然后看設置方法,下邊會用到。


然后,要在settings.py文件中配置郵箱相關參數:

# send e-mail

EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'#email后端

EMAIL_USE_TLS =False#是否使用TLS安全傳輸協議

EMAIL_USE_SSL =True#是否使用SSL加密,qq企業郵箱要求使用

EMAIL_HOST ='smtp.exmail.qq.com'#發送郵件的郵箱 的 SMTP服務器,這里用了qq企業郵箱EMAIL_PORT =465#發件箱的SMTP服務器端口

EMAIL_HOST_USER ='charleschen@xmdaren.com'#發送郵件的郵箱地址EMAIL_HOST_PASSWORD ='*********'#發送郵件的郵箱密碼

最后,在views.py中制作一個簡單的demo郵件并發送:

fromdjango.core.mail import send_mai

l# send_mail的參數分別是? 郵件標題,郵件內容,發件箱(settings.py中設置過的那個),收件箱列表(可以發送給多個人),失敗靜默(若發送失敗,報錯提示我們)

send_mail('Subject here','Here is the message.','charleschen@xmdaren.com',['to@example.com'], fail_silently=False)

如果一切正常,那么郵件發送已經成功了。但是我很蛋疼的遇到了問題,報錯顯示是語法錯誤...

大坑注意

我到達上一步的時候,報錯顯示語法錯誤,可是一共就幾行代碼,檢查了幾遍也沒錯,怎么回事呢?后來改用python自帶的smtp模塊發送,一步步調試之后,發現問題在登陸郵箱的時候就失敗了。然后在大神的帶領下,使用Wireshark軟件抓包,發現登陸時,SMTP協議會收取本地計算機名稱,在這個名稱中,不能包含諸如橫杠"-",空格" "等字符,而我的本地計算機名稱包含了"-",并且公司的局域網路由器在主機名后邊加了帶空格的后綴“HDCP HOST”所以導致SMTP協議校驗失敗。

問題清除之后就好辦了,首先修改主機名,然后在設置ip地址的高級設置-DNS中,手動添加一個合法的DNS后綴即可。我這里改為dhcp3


http://blog.csdn.net/creabine/article/details/53857826

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容