django发送邮件

文章介绍了如何在Django项目的settings.py中配置SMTP服务,使用QQ邮箱发送电子邮件,包括SMTP服务器地址、端口、SSL加密和设备授权码。同时,给出了一个封装的send_email函数,演示了如何发送带有附件和HTML内容的邮件,以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

settings.py中配置项:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'  # QQ邮箱的smtp服务器
EMAIL_PORT = 465  # 端口为465或587
EMAIL_USE_SSL = True  # SSL加密方式设置为True
EMAIL_HOST_USER = '**@qq.com'  # 这里是你的邮箱账号
EMAIL_HOST_PASSWORD = '***'  # 注意这里不能用你邮箱账号的密码,而要用申请的设备授权码。
EMAIL_SENDER = '' # 这里是自定义的配置,用于发送邮件的抬头

封装好的发送邮件的工具

"""
用此功能,需在settings.py中配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'  # 邮箱的smtp服务器 新浪邮箱smtp.sina.com;搜狐邮箱smtp.sohu.com;126邮箱smtp.126.com;QQ邮箱smtp.qq.com;163邮箱smtp.163.com;
EMAIL_PORT = 465  # 端口为465或587
EMAIL_USE_SSL = True  # SSL加密方式设置为True
EMAIL_HOST_USER = ''  # 这里是你的邮箱账号
EMAIL_HOST_PASSWORD = ''  # 注意这里不能用你邮箱账号的密码,而要用申请的设备授权码。
EMAIL_SENDER = '' # 发送抬头
"""
import os
from django.core.mail import EmailMessage

from django.conf import settings
from utils.exceptions import APIException


def send_email(subject, content, to_list, cc=None, attach_list=None, content_subtype='plain',
               file_max_size=1024 * 1024 * 50):
    """
    发邮件:163邮箱每天上限为600封
    邮箱不存在不会报错,发件的邮箱会收到邮件被退回的通知
    如果主送人员的邮件不存在,抄送人员邮箱存在, 抄送会正常发送,主送失败

    subject:标题
    content:内容(支持html语言 如果是html语言,需要将content_subtype设置成html)
    from_email:发件人信息 eg:'单位名称<邮件>'
    to_list:发送给谁['姓名<邮箱>']或['邮箱']
    cc: 抄送列表 格式:['姓名<邮箱>']或['邮箱']
    attach_list:附件绝对路径列表 eg:['1.png','2.png']
    content_subtype:内容的类型 plain:纯文本 html:超文本标记语言
    file_max_size:附件最大允许多大 不允许超过50兆 可以设置到更小
    return: bool 是否发送成功True成功  False失败
    """
    email = EmailMessage(
        subject=subject,
        body=content,
        from_email='%s<%s>' % (getattr(settings, 'EMAIL_SENDER'), getattr(settings, 'EMAIL_HOST_USER')),
        to=to_list,
        cc=cc
    )
    email.content_subtype = content_subtype
    if attach_list:
        for attach in attach_list:
            if not os.path.exists(attach):
                raise APIException(message="%s文件不存在" % attach)
            if os.path.getsize(attach) >= file_max_size:
                raise APIException(message="%s文件大小超过限制" % attach)
            email.attach_file(attach)
    res = email.send()
    if res == 1:
        return True
    return False

调用方式:

res = send_email('测', '<p style="color: red;">这是一段红色的文字。</p>',
                 ['姓名<邮箱@163.com>'],
                 cc=['姓名<邮箱@163.com>'],
                 content_subtype='html',
                 attach_list=['文件路径']
                 )

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值