【django】02-使用django發送郵件

【原創】—>http://www.liujiangblog.com/course/django/113# <-------

通常而言,我們在用戶註冊成功,實際登陸之前,會發送一封電子郵件到對方的註冊郵箱中,表示歡迎。進一步的還可能要求用戶點擊郵件中的鏈接,進行註冊確認。

下面就讓我們先看看如何在Django中發送郵件吧。

一、在Django中發送郵件
其實在Python中已經內置了一個smtp郵件發送模塊,Django在此基礎上進行了簡單地封裝。

首先,我們需要在項目的settings文件中配置郵件發送參數,分別如下:

 	EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'smtp.sina.com'
    EMAIL_PORT = 25
    EMAIL_HOST_USER = '[email protected]'
    EMAIL_HOST_PASSWORD = 'xxxxxxxxxxx'

第一行指定發送郵件的後端模塊,大多數情況下照抄!
第二行,不用說,發送方的smtp服務器地址,建議使用新浪家的;
第三行,smtp服務端口,默認爲25;
第四行,你在發送服務器的用戶名;
第五行,對應用戶的密碼。
特別說明:

某些郵件公司可能不開放smtp服務
某些公司要求使用ssl安全機制
某些smtp服務對主機名格式有要求
這些都是前人踩過的坑。

配置好了參數,就可以先測試一下郵件功能了。

在項目根目錄下新建一個send_mail.py文件,然後寫入下面的內容:

import os
from django.core.mail import send_mail

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'  # settings

if __name__ == '__main__':   
# 不改了 宣傳一波吧
    send_mail(
        '來自www.liujiangblog.com的測試郵件',
        '歡迎訪問www.liujiangblog.com,這裏是劉江的博客和教程站點,本站專注於Python和Django技術的分享!',
        '[email protected]',
        ['[email protected]'],
    )

對於send_mail方法,第一個參數是郵件主題subject;第二個參數是郵件具體內容;第三個參數是郵件發送方,需要和你settings中的一致;第四個參數是接受方的郵件地址列表。請按你自己實際情況修改發送方和接收方的郵箱地址。

另外,由於我們是單獨運行send_mail.py文件,所以無法使用Django環境,需要通過os模塊對環境變量進行設置,也就是:

os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘mysite.settings’
運行send_mail.py文件,注意不是運行Django服務器。然後到你的目的地郵箱查看郵件是否收到。

二、發送HTML格式的郵件
通常情況下,我們發送的郵件內容都是純文本格式。但是很多情況下,我們需要發送帶有HTML格式的內容,比如說超級鏈接。一般情況下,爲了安全考慮,很多郵件服務提供商都會禁止使用HTML內容,幸運的是對於以http和https開頭的鏈接還是可以點擊的。

下面是發送HTML格式的郵件例子。刪除send_mail.py文件內原來的所有內容,添加下面的代碼:

import os
from django.core.mail import EmailMultiAlternatives

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

if __name__ == '__main__':

    subject, from_email, to = '來自www.liujiangblog.com的測試郵件', '[email protected]', '[email protected]'
    text_content = '歡迎訪問www.liujiangblog.com,這裏是劉江的博客和教程站點,專注於Python和Django技術的分享!'
    html_content = '<p>歡迎訪問<a href="http://www.liujiangblog.com" target=blank>www.liujiangblog.com</a>,這裏是劉江的博客和教程站點,專注於Python和Django技術的分享!</p>'
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
    msg.attach_alternative(html_content, "text/html")
    msg.send()

其中的text_content是用於當HTML內容無效時的替代txt文本。

打開測試用的接收郵箱,可以看到鏈接能夠正常點擊,如下圖所示:

在這裏插入圖片描述

PS:如果不能發送郵件,需要在發送的郵箱進行一下小修改
以新浪郵箱爲例,打開郵箱設置,做以下修改
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章