Django發送html郵件的方法

來源:互聯網
上載者:User

Django發送html郵件的方法

   本文執行個體講述了Django發送html郵件的方法。分享給大家供大家參考。具體如下:

  在Django中,發送郵件非常的方便,一直沒有時間,今天來做一個小小的總結吧。

  我們常用的當然是通過send_mail發送郵件:

   代碼如下:

  send_mail(subject,message,from_email,recipient_list,fail_silently=False,auth_user=None,auth_password

=None,connection=None)

  subject,message,from_email 和recipient_list 這四個參數是必須的。

  subject: 字串,表示郵件標題。

  message: 字串,表示郵件內容。

  from_email: 字串,表示發件郵箱。

  recipient_list: 字串列表,列表中每個成員都是一個郵箱地址,而且每個收件者都會在 “收件者/To:” 欄看到出現在recipient_list 中的其他收件者。

  fail_silently: (可選)布爾值。為False 時,send_mail 會拋出smtplib.SMTPException 異常。smtplib 文檔列出了所有可能的異常。這些異常都是SMTPException 的子類。

  auth_user: (可選)SMTP伺服器的認證使用者名稱。沒提供該參數的情況下,Django會使用EMAIL_HOST_USER 配置項的設定。

  auth_password: (可選)SMTP伺服器的認證密碼,沒提供該參數的情況下,Django會使用EMAIL_HOST_PASSWORD 配置項的設定。

  connection: (可選)發送郵件的後端。沒提供該參數的情況下,Django會使用預設後端的執行個體。

  以下是一個簡單的案例:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

from django.core.mail import send_mail

from django.template import Context, loader

context = {

'nickname': user.nickname,

'verify_url': verify_url,

}

email_template_name = 'template.html'

t = loader.get_template(email_template_name)

mail_list = [user.email, ]

send_mail(

subject=title,

message=t.render(Context(context)),

from_email=EMAIL_HOST_USER,# 發件郵箱

recipient_list=mail_list,

fail_silently=False,

auth_user=EMAIL_HOST_USER, # SMTP伺服器的認證使用者名稱

auth_password=EMAIL_HOST_PASSWORD, # SMTP伺服器的認證使用者密碼

connection=None

)

  用過的人可能會發現,你在template.html中的標籤,並沒有通過瀏覽器的解析而顯示出來了。

  怎麼辦?我們要發送HTML郵件,Django當然是為你提供了好的解決方案的,請看下面一段代碼:

  ?

1

2

3

4

5

6

7

from django.core.mail import EmailMultiAlternatives

from django.template import Context, loader

subject, from_email, to = title, EMAIL_HOST_USER, mail_list

html_content = t.render(Context(context))

msg = EmailMultiAlternatives(subject, html_content, from_email, to)

msg.attach_alternative(html_content, "text/html")

msg.send()

  看,很簡單吧,那麼現在我要稍稍的做一點點改動,我需要發送附件給收件者,只需要做一個簡單的修改即可:

  ?

1

2

3

4

5

6

7

8

from django.core.mail import EmailMultiAlternatives

from django.template import Context, loader

subject, from_email, to = title, EMAIL_HOST_USER, mail_list

html_content = t.render(Context(context))

msg = EmailMultiAlternatives(subject, html_content, from_email, to)

msg.attach_alternative(html_content, "text/html")

msg.attach_file(u'D:/My Documents/Python/doc/test.doc') # 添加附件發送

msg.send()

  好了,到此為止,發送郵件已經結束了。不過,此時,需求變了,我在自己的網站上配置了多個發送郵件的使用者名稱和密碼,現在需要用我指定的使用者名稱和密碼給使用者發送郵件,該怎麼辦呢?請看下面的一段代碼:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from django.core.mail import EmailMultiAlternatives,get_connection

from django.template import Context, loader

conn = get_connection() # 返回當前使用的郵件後端的執行個體

conn.username = 'my_email@qq.com'# 更改使用者名稱

conn.password = 'my_email' # 更改密碼

conn.host = 'smtp.exmail.qq.com' # 設定郵件伺服器

conn.open() # 開啟串連

EMAIL_HOST_USER = 'my_email@qq.com'

subject, from_email, to = title, EMAIL_HOST_USER, mail_list

html_content = t.render(Context(context))

msg = EmailMultiAlternatives(subject, html_content, from_email, to)

msg.attach_alternative(html_content, "text/html")

conn.send_messages([msg,]) # 我們用send_messages發送郵件

conn.close()# 發送完畢記得關閉串連

  看來,也不是很難吧!

  django.core.mail 的 get_connection()方法返回你當前使用的郵件後端的執行個體。

  代碼如下:

  get_connection(backend=None,fail_silently=False,*args, **kwargs)

  預設情況下,對 get_connection() 的調用會返回一個郵件後端執行個體,具體是哪個後端由EMAIL_BACKEND 配置項決定。如果指定了``backend`` 參數,就會對該後端進行執行個體化。

  友情提示:在發送的HTML郵件中包含圖片時,應該制定可以通過http訪問的地址。如:http://www.baidu.com/medias/xxx.png

  希望本文所述對大家的Python程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.