django之三十--发送满足【邮件正文值为字符串】的单个/多个邮件

一、写这篇博客的目的

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

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

  1. 发送邮件正文值为字符串的单个邮件,使用该函数:send_mail();
  2. 发送邮件正文值为字符串的多个邮件,使用该函数:send_mass_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、第二步:实现发送邮件正文值为字符串的单个邮件的功能

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

from django.core.mail import send_mail

from django.http import HttpResponse, Http404

import time



# 发送邮件正文值为字符串的单个邮件

def send_email_001(request):

    send_mail(subject="这是lucas给你们发的邮件标题!",

              message="这是邮件的正文!",

              from_email="[email protected]",

              recipient_list=["[email protected]"],

              )

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

    return HttpResponse("邮件发送成功!发送时间为:%s" % now_time)

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

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

2.3、第三步:重启服务

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

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

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

# 发送邮件正文值为字符串的多个邮件

def send_email_002(request):

    first_email = (

        "这是lucas给你们发的第一封邮件的邮件标题",

        "这是第一封邮件的正文",

        "[email protected]",

        ["[email protected]", ],

    )

    second_email = (

        "这是lucas给你们发的第二封邮件的邮件标题",

        "这是第二封邮件的正文",

        "[email protected]",

        ["[email protected]", ],

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

    )

    send_mass_mail((first_email, second_email), fail_silently=False)

    return HttpResponse("多封邮件同时发送成功了")

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

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

2.3.3.第三步:重启服务

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

 

三、相关知识点

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文本的传输;

2、如何获取qq邮箱的授权码

操作步骤大致如下:

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

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

 

 

猜你喜欢

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