• Django内置发送邮件功能


    第一步:setting.py配置

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = False  # 是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性。)
    EMAIL_USE_SSL = False  # 是否使用SSL加密,qq企业邮箱要求使用
    EMAIL_HOST = 'smtp.163.com'  # 发送邮件的邮箱 的 SMTP服务器,这里用了163邮箱
    EMAIL_PORT = 25  # 发件箱的SMTP服务器端口# 上面配置可以不动,下面配置修改为自己的
    EMAIL_HOST_USER = 'tin@163.com'  # 发送邮件的邮箱地址
    EMAIL_HOST_PASSWORD = 'xxxxxx'  # 发送邮件的邮箱密码(这里使用的是授权码)
    EMAIL_TO_USER_LIST = ['xxxx@foxmail.com', 'xxx@qq.com']   # 此字段是可选的,用来配置收件人列表
    

      

    第二步:url.py

    # 发送邮件
    url(r'^send_emial/', views.send_email, name="send_email")
    

      

    第三步:views.py

    简单发送邮件:

    from django.core.mail import send_mail
    from django.shortcuts import HttpResponse
    
    def send_email(request):
        send_mail(
            subject='这里是邮件标题',
            message='这里是邮件内容',
            from_email='tian@163.com',  # 发件人
            recipient_list=['1206180814@qq.com'],  # 收件人
            #收件人可以直接写,也可以从setting.py中配置中导入
            fail_silently=False
        )
        return HttpResponse('OK')
    

      

    send_mail各参数如下:

    • subject,邮件标题
    • message,发送邮件内容
    • from_email,发件人
    • recipient_list,收件人,可以是多个
    • fail_silently,如果为False时,发送失败抛出错误

    现在,有了上述这些关键代码之后,我们就可以向指定的邮箱发邮件了,如果收不到邮件,可有去看垃圾邮件中找找,可能被当成了垃圾邮件(我在qq邮箱中遇到这情况,解决办法是,点开这个邮件,点击我不是垃圾邮件,就好了)。

    多封邮件发送多个收件人
    from django.core.mail import send_mail, send_mass_mail
    def send_email(request):
        message1 = ('邮件标题1', '内容1', 'tian@163.com', ['1206180814@qq.com'])
        message2 = ('邮件标题2', '内容2', 'tian@163.com', ['1206180814@qq.com'])
        send_mass_mail((message1, message2), fail_silently=False)
        return HttpResponse('OK')
    

      

    当发送多封邮件时,就要使用send_mass_mail了。上例中的列表内,也可以填写多个收件人。

    这里简要说下send_mailsend_mass_mail的区别:

    send_mail每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail

    发送带有附件的邮件

    导入EmailMessage来完成:

    from django.shortcuts import render, HttpResponse
    from django.core.mail import EmailMessage
    
    
    def send_email(request):
        """发送带附件"""
        msg = EmailMessage(
            subject='这是带附件的邮件标题',
            body='这是带附件的邮件内容',
            from_email='tian@163.com',  # 也可以从settings中获取
            to=['1206180814@qq.com']
        )
        msg.attach_file('t2.xls')
        msg.send(fail_silently=False)
        return HttpResponse('OK')
    

      

    上例中,attach_file使用当前文件系统下的某个文件做为附件。调用时,传入某个文件的完整路径,以及该附件的MIME类型(可选的)。 忽略MIME类型的话,Django会自动根据附件文件名来推测MIME类型。最简单的用法如下:

    message.attach_file('/images/weather_map.png')
    

      

    另外的,我们还可以使用attach传递三个参数:filenamecontent 和 mimetype. filename 是出现在邮件中的附件文件的名称,content 是附件的内容,而 mimetype 是附件所使用的MIME类型。 如果忽略 mimetype, Django会自动根据附件文件名来推测MIME内容类型。
    例如:

    message.attach('design.png', img_data, 'image/png')
    

      

    https://docs.djangoproject.com/zh-hans/3.2/topics/email/

     https://www.cnblogs.com/qingchengzi/articles/14449307.html

  • 相关阅读:
    十一、EnterpriseFrameWork框架的分层与系统业务的结合
    十八、【开源】EnterpriseFrameWork框架核心类库之Winform控制器
    进步的起点
    六、EnterpriseFrameWork框架基础功能之权限管理
    十四、EnterpriseFrameWork框架核心类库之简易ORM
    八、EnterpriseFrameWork框架基础功能之自定义报表
    五、利用EnterpriseFrameWork快速开发基于WebServices的接口
    十五、EnterpriseFrameWork框架核心类库之系统启动入口与初始化
    十二、EnterpriseFrameWork框架核心类库之与EntLib结合
    十七、EnterpriseFrameWork框架核心类库之Web控制器
  • 原文地址:https://www.cnblogs.com/yizhipanghu/p/16083741.html
Copyright © 2020-2023  润新知