• (转)Django发送html邮件


    本文转自http://blog.csdn.net/yima1006/article/details/8991145 

    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会使用默认后端的实例。

     

      以下是一个简单的事例:

    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 = '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

     你还可以参考官方文档1.4(中文):https://django-chinese-docs-14.readthedocs.org/en/latest/topics/email.html

  • 相关阅读:
    poj3304 Segments
    Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]
    Java基础知识强化之IO流笔记26:FileInputStream / FileOutputStream 复制mp4视频的案例
    Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
    Java基础知识强化之IO流笔记24:FileInputStream / FileOutputStream 复制文本文件案例2
    Java基础知识强化之IO流笔记23:计算机是如何识别把两个字节拼接为中文(附加)
    Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1
    Java基础知识强化之网络编程笔记08:TCP之客户端键盘录入服务器控制台输出
    Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
    Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据
  • 原文地址:https://www.cnblogs.com/huafeng/p/3495398.html
Copyright © 2020-2023  润新知