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_emailrecipient_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會使用默認後端的實例。

   以下是一個簡單的事例:

           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當然是爲你提供了好的解決方案的,請看下面一段代碼:

            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()
看,很簡單吧,那麼現在我要稍稍的做一點點改動,我需要發送附件給收件人,只需要做一個簡單的修改即可:

            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()

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

            from django.core.mail import EmailMultiAlternatives,get_connection
            from django.template import Context, loader 

            conn = get_connection()                # 返回當前使用的郵件後端的實例 
            conn.username = '[email protected]'      # 更改用戶名 
            conn.password = 'my_email'             # 更改密碼 
            conn.host = 'smtp.exmail.qq.com'       # 設置郵件服務器 
            conn.open()                            # 打開連接

            EMAIL_HOST_USER = '[email protected]'
            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




發佈了47 篇原創文章 · 獲贊 124 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章