django之三十一--发送满足【邮件正文值为一个html页面】的单个邮件

一、写这篇博客的目的

主要记录如何通过django来实现这个功能:发送满足【邮件正文值为一个html页面】的单个邮件;

发送满足【邮件正文值为一个html页面】的单个邮件,可以使用该函数:send_mail()   

完整操作流程可以看接下来的内容;

 

二、完整操作流程

1、第一步:在【settings.py】里新增邮箱配置信息

# 下面的代码都是我个人新增的,不是djano框架默认生成的;

# 配置qq邮箱信息

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # 值必须为这个

EMAIL_USE_SSL = True  # SSL加密方式,值必须为True

EMAIL_HOST = 'smtp.qq.com'  # 发送邮件的qq邮箱的SMTP服务器

EMAIL_PORT = 465  # QQ邮箱对应的SMTP服务器端口

EMAIL_HOST_USER = '[email protected]'  # 发件人

EMAIL_HOST_PASSWORD = 'xolnfbqgdybxji11'  # qq授权码(不能使用qq密码只能使用qq授权码)

EMAIL_FROM = 'Rainbow<[email protected]>'  # 邮件显示的发件人

2、第二步:在【helloworld/hello/views.py】里新增视图函数

from django.core.mail import send_mail, send_mass_mail

import time





# 发送邮件正文值为一个html页面的单个邮件

def send_email_003(request):

    html_content = '''

                    <!DOCTYPE HTML>

                    <html>

                    <head>

                        <meta charset="UTF-8">

                        <title>带图片的邮件</title>

                    </head>

                    <body>





                    这是第一张图片,点击图片后可跳转到我的博客首页<br>

                    <a href="https://blog.csdn.net/LYX_WIN" target="_blank">

                        <p>

                        <img src="https://img-blog.csdnimg.cn/20210311134514969.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZWF9XSU4=,size_16,color_FFFFFF,t_70" height="400" width="300" />

                        </p>

                    </a>



                    <p>

                    这是第二张图片,点击后不会触发任何跳转效果<br>

                    <img src="http://www.w3school.com.cn/i/eg_chinarose.jpg" height=200 width=400 />

                    </p>



                    </body>

                    </html>

                   '''



    send_mail(subject="这是小可爱给你发的邮件标题(邮件正文值为一个html页面)",

              message="这是邮件的正文!(当入参html_message的值不为None,那入参message的值就不会生效)",

              from_email="[email protected]",

              recipient_list=["[email protected]"],  # 收件人邮箱可以是任意邮箱

              # recipient_list=["[email protected]","朋友1的[email protected]","朋友2的[email protected]","朋友3 的@qq.com"]

              html_message=html_content

              )



    now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    return HttpResponse("邮件正文值为一个html页面的邮件发送成功!发送时间为:%s" % now_time)



3、第三步:在【helloworld/helloworld/urls.py】里新增url匹配规则

url(r"^send_email_003/$",views.send_email_003),

4、第四步:重启服务

5、第五步:任一浏览器上输入url地址【http://0.0.0.0:8000/send_email_003/】进行访问后,查看结果

 

三、相关知识点

1、send_mail()函数的源码简单分析

def send_mail(subject, message, from_email, recipient_list,

              fail_silently=False, auth_user=None, auth_password=None,

              connection=None, html_message=None):

    """

    Easy wrapper for sending a single message to a recipient list. All members

    of the recipient list will see the other recipients in the 'To' field.



    If from_email is None, use the DEFAULT_FROM_EMAIL setting.

    If auth_user is None, use the EMAIL_HOST_USER setting.

    If auth_password is None, use the EMAIL_HOST_PASSWORD setting.



    Note: The API for this method is frozen. New code wanting to extend the

    functionality should use the EmailMessage class directly.

    """

    connection = connection or get_connection(

        username=auth_user,

        password=auth_password,

        fail_silently=fail_silently,

    )

    mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)

    if html_message:

        mail.attach_alternative(html_message, 'text/html')



    return mail.send()

截取这部分源码:

    mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)

    if html_message:

        mail.attach_alternative(html_message, 'text/html')



    return mail.send()

从这部分源码可以简单看出来:当入参html_message值不为空,会调用【EmailMultiAlternatives】类提供的【attach_alternative】方法,从而实现最终发送邮件正文为一个html页面的邮件的功能;

 

入参message值和入参html_message值的组合,主要有这两个场景:

  1. 当函数send_mail()的入参message的值不为空,入参html_message的值也不为空,那么:入参message的值不生效,入参htm_message的值生效;
  2. 当函数send_mail()的入参message的值不为空,入参html_message的值为默认值None,那么:入参message的值生效,入参htm_message的值不生效;

猜你喜欢

转载自blog.csdn.net/LYX_WIN/article/details/114867291
今日推荐