最近用python寫了官網(wǎng)的后臺。官網(wǎng)的后臺功能比較簡單蜂桶,一個多語言支持,一個聯(lián)系我們犀勒,即給公司發(fā)郵件的功能屎飘。多語言支持的方式寫在另一篇博客了。這里先來說一說Django的發(fā)送郵件功能贾费。
其實python本身自帶了發(fā)送郵件的功能,Django在其基礎(chǔ)上進行了封裝檐盟,使其更加簡單易用褂萧。僅僅幾行代碼就可以實現(xiàn)發(fā)送郵件的功能。
但是在實際開發(fā)的時候葵萎,遇到了兩個大坑导犹,折騰了3天才真正搞定唱凯,在這里做一個簡單的記錄和梳理,希望能幫其他小伙伴規(guī)避這些問題谎痢。
使用Django做發(fā)送郵件的功能前磕昼,首先要有一個支持smtp協(xié)議的郵箱并檢查設(shè)置。**在這里要控訴一下網(wǎng)易郵箱节猿,163和126郵箱票从,都會強行把你要發(fā)送的郵件判定為垃圾郵件,從而阻止發(fā)送滨嘱,所以這里不建議使用峰鄙。最好使用企業(yè)郵箱,付費的真的比較靠譜太雨。**我這里以騰訊企業(yè)郵箱作為示范:
1.登陸騰訊企業(yè)郵箱吟榴,進入設(shè)置--客戶端設(shè)置
2.確認SMTP服務(wù)是否開啟,如下圖:
3.若沒有開啟囊扳,記得開啟吩翻。然后看設(shè)置方法,下邊會用到锥咸。
然后仿野,要在settings.py文件中配置郵箱相關(guān)參數(shù):
# send e-mail
EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'#email后端
EMAIL_USE_TLS =False#是否使用TLS安全傳輸協(xié)議
EMAIL_USE_SSL =True#是否使用SSL加密,qq企業(yè)郵箱要求使用
EMAIL_HOST ='smtp.exmail.qq.com'#發(fā)送郵件的郵箱 的 SMTP服務(wù)器她君,這里用了qq企業(yè)郵箱EMAIL_PORT =465#發(fā)件箱的SMTP服務(wù)器端口
EMAIL_HOST_USER ='charleschen@xmdaren.com'#發(fā)送郵件的郵箱地址EMAIL_HOST_PASSWORD ='*********'#發(fā)送郵件的郵箱密碼
最后脚作,在views.py中制作一個簡單的demo郵件并發(fā)送:
fromdjango.core.mail import send_mai
l# send_mail的參數(shù)分別是? 郵件標題,郵件內(nèi)容缔刹,發(fā)件箱(settings.py中設(shè)置過的那個)球涛,收件箱列表(可以發(fā)送給多個人),失敗靜默(若發(fā)送失敗,報錯提示我們)
send_mail('Subject here','Here is the message.','charleschen@xmdaren.com',['to@example.com'], fail_silently=False)
如果一切正常校镐,那么郵件發(fā)送已經(jīng)成功了亿扁。但是我很蛋疼的遇到了問題,報錯顯示是語法錯誤...
大坑注意
我到達上一步的時候鸟廓,報錯顯示語法錯誤从祝,可是一共就幾行代碼,檢查了幾遍也沒錯引谜,怎么回事呢牍陌?后來改用python自帶的smtp模塊發(fā)送,一步步調(diào)試之后员咽,發(fā)現(xiàn)問題在登陸郵箱的時候就失敗了毒涧。然后在大神的帶領(lǐng)下,使用Wireshark軟件抓包贝室,發(fā)現(xiàn)登陸時契讲,SMTP協(xié)議會收取本地計算機名稱仿吞,在這個名稱中,不能包含諸如橫杠"-",空格" "等字符捡偏,而我的本地計算機名稱包含了"-"唤冈,并且公司的局域網(wǎng)路由器在主機名后邊加了帶空格的后綴“HDCP HOST”所以導(dǎo)致SMTP協(xié)議校驗失敗。
問題清除之后就好辦了银伟,首先修改主機名你虹,然后在設(shè)置ip地址的高級設(shè)置-DNS中,手動添加一個合法的DNS后綴即可枣申。我這里改為dhcp3
http://blog.csdn.net/creabine/article/details/53857826