zoukankan      html  css  js  c++  java
  • django学习-30.发送满足【邮件正文值为字符串】的单个/多个邮件

    目录结构

    1.写这篇博客的目的

    2.完整操作流程

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

    2.2.第二步:实现发送邮件正文值为字符串的单个邮件的功能

    2.2.1.第一步:在【helloworld/hello/views.py】里新增视图函数

    2.2.2.第二步:在【helloworld/helloworld/urls.py】里新增url匹配规则

    2.2.3.第三步:重启服务

    2.2.4.第四步:任一浏览器上输入url地址【http://192.168.1.81:8000/send_email_001/】进行访问后,查看结果

    2.3.第三步:实现发送邮件正文值为字符串的多个邮件的功能

    2.3.1.第一步:在【helloworld/hello/views.py】里新增视图函数

    2.3.2.第二步:在【helloworld/helloworld/urls.py】里新增url匹配规则

    2.3.3.第三步:重启服务

    2.3.4.第四步:任一浏览器上输入url地址【http://192.168.1.81:8000/send_email_002/】进行访问后,查看结果

    3.相关知识点

    3.1.send_mail()函数的源码简单分析

    3.2.如何获取qq邮箱的授权码

     

    1.写这篇博客的目的

    主要记录如何通过django来实现这个功能:发送满足【邮件正文值为字符串】的单个/多个邮件;

    django的发邮件的功能很简单发邮件的相关函数已经封装好了,我们主要要知道怎么使用函数即可:

    1. 发送邮件正文值为字符串的单个邮件,使用该函数:send_mail();
    2. 发送邮件正文值为字符串的多个邮件,使用该函数:send_mass_mail();   

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

    2.完整操作流程

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

    # 下面的代码都是我个人新增的,不是djano框架默认生成的;
    # 1.1.配置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 = '727803257@qq.com'         # 发件人
    EMAIL_HOST_PASSWORD = 'dwvvnvjerwcvswp'      # qq授权码(不能使用qq密码只能使用qq授权码)
    EMAIL_FROM = '洪景盛<727803257@qq.com>'       # 邮件显示的发件人

    细节:

    1.如果是除了qq的其他企业邮箱,直接使用密码登录的话,需要使用TLS方式的相关配置。配置模板大概如下:

    # 1.2.配置除了qq的其他企业邮箱信息(目前用163网易公司的企业邮箱当范例)
    # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # 值必须为这个
    # EMAIL_USE_TLS = True                                           # TLS加密方式,值必须为True
    # EMAIL_HOST = 'smtp.163.com'                                    # 发送邮件的对应企业邮箱的SMTP服务器,比如163网易公司就对应值【'smtp.163.com'】
    # EMAIL_PORT = 25                                                # 企业邮箱对应的SMTP服务器端口
    # EMAIL_HOST_USER = 'aaaa@163.com'                               # 发件人/账号
    # EMAIL_HOST_PASSWORD = '123456'                                 # 企业邮箱密码
    # EMAIL_FROM = '洪景盛<aaaa@163.com>'                             # 邮件显示的发件人

    2.2.第二步:实现发送邮件正文值为字符串的单个邮件的功能

    2.2.1.第一步:在【helloworld/hello/views.py】里新增视图函数

    from django.http import HttpResponse,Http404
    from django.core.mail import send_mail
    from utils.common import Common
    common = Common()
    
    def send_email_001(request):
        '''发送邮件正文值为字符串的单个邮件'''
        send_mail(subject="这是洪景盛给你们发的邮件的邮件标题!",
                  message="这是邮件的正文!",
                  from_email="727803257@qq.com",
                  recipient_list=["727803257@qq.com"],
                  # recipient_list=["727803257@qq.com","朋友1的qq@qq.com","朋友2的qq@qq.com","朋友3的qq@qq.com"]
                  )
    
        now_time = common.now_time_of_y_m_d_H_M_S()
        return HttpResponse("邮件发送成功!发送时间为:%s"%now_time)

    2.2.2.第二步:在【helloworld/helloworld/urls.py】里新增url匹配规则

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

    2.2.3.第三步:重启服务

    2.2.4.第四步:任一浏览器上输入url地址【http://192.168.1.81:8000/send_email_001/】进行访问后,查看结果

     

     

    2.3.第三步:实现发送邮件正文值为字符串的多个邮件的功能

    2.3.1.第一步:在【helloworld/hello/views.py】里新增视图函数

    from django.core.mail import send_mail,send_mass_mail
    def send_email_002(request):
        '''发送邮件正文值为字符串的多个邮件'''
        first_email = (
                       "这是洪景盛给你们发的第一封邮件的邮件标题!",
                       "这是第一封邮件的正文!",
                       "727803257@qq.com",
                       ["727803257@qq.com"],
                       )
        second_email = (
                       "这是洪景盛给你们发的第二封邮件的邮件标题!",
                       "这是第二封邮件的正文!",
                       "727803257@qq.com",
                        # ["727803257@qq.com"],
                        ["727803257@qq.com","朋友1的qq@qq.com","朋友2的qq@qq.com","朋友3的@qq.com"]
                        )
        send_mass_mail((first_email,second_email),fail_silently=False)
        return HttpResponse("多封邮件同时发送成功了!")

    2.3.2.第二步:在【helloworld/helloworld/urls.py】里新增url匹配规则

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

    2.3.3.第三步:重启服务

    2.3.4.第四步:任一浏览器上输入url地址【http://192.168.1.81:8000/send_email_002/】进行访问后,查看结果

     

    3.相关知识点

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

    send_mail()函数里的每个入参的分析:

    • subject: (必填,数据类型为字符串)邮件标题;
    • message: (必填,数据类型为字符串)邮件内容;
    • from_email: (必填,数据类型为字符串)发件邮箱;
    • recipient_list: (必填,数据类型为列表)l列表中每个值都是一个接收邮件的邮箱地址;
    • fail_silently: (非必填,数据类型为布尔值)值为False时:当邮件发送失败,send_mail()函数会抛出【smtplib.SMTPException】提供的异常信息;
    • auth_user:(非必填,数据类型为字符串)SMTP服务器的认证用户名。没设置该参数值的情况下,Django会使用【settings.py】里的【EMAIL_HOST_USER】配置项的值;
    • auth_password:(非必填,数据类型为字符串)SMTP服务器的认证密码。没设置该参数值的情况下,Django会使用【settings.py】里的【EMAIL_HOST_PASSWORD】配置项的值;
    • connection: (非必填,数据类型为字符串)发送邮件的后端。没设置该参数值的情况下,Django会使用【settings.py】里的【EMAIL_BACKEND】配置项的值;
    • html_message: (非必填,数据类型为字符串)值为一个html的代码。该参数是send_mail()函数独有的参数,可以比较简单地实现一个html文本的传输;

    3.2.如何获取qq邮箱的授权码

    操作步骤大致如下:

    1. 在网站成功登录qq邮箱;
    2. 进入【设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】区域;
    3. 点击【生成授权码】按钮,生成一个全新的授权码;
    4. 复制这个授权码;

    操作步骤对应的相关截图如下:

     

  • 相关阅读:
    linux网络编程系列TCP及常用接口分析
    Linux网络编程系列TCP状态分析
    常见的HTTP 1.1状态代码及含义
    修改android SDK 模拟器(avd) 内存大小
    Android应用研发核心竞争力
    网路编程——阻塞式&&非阻塞式
    URI、URL和URN之间的区别与联系
    初识android——四大组件
    无依赖的combobox组件(autocomplete组件)
    为什么JS没有catchMyException或类似的方法
  • 原文地址:https://www.cnblogs.com/xiamen-momo/p/14451038.html
Copyright © 2011-2022 走看看