Django 邮件发送


1、配置settings.py 文件

EMAIL_HOST = 'smtp.exmail.qq.com'  # 邮件服务器
EMAIL_HOST_USER = 'xxx@xxx.com'  # 用户名
EMAIL_HOST_PASSWORD = 'xxxxxx'  # **密码,这里要用到授权码才行!**
EMAIL_HOST_TLS = False  # 是否加密

2、编写一个类

# _*_ coding:utf8 _*_
from django.core.mail import send_mail


class SendMail:
    """
    :param 邮件主题subject,邮件内容message, 发件人from_email, 收件人地址列表recipient_list, 是否静默发送fail_silently
    :return True or False
    """

    def __init__(self, mail_theme, mail_content, receive_add,):
        self.mail_theme = mail_theme
        self.mail_content = mail_content
        self.receive_add = receive_add

    def send(self):
        try:
            send_mail(
                subject=self.mail_theme,  # 邮件主题
                message=self.mail_content,  # 邮件内容
                from_email='xxx1@xxx.com',  # 发件人邮件地址
                recipient_list=self.receive_add,  # 收件人邮件地址列表
                fail_silently=False,  # 发送失败是否提示,False表示提示, True 表示静默发送不提示错误。
            )
            return True
        except Exception as e:
            print(e)
            return False

3、调用示例

>>> from djapp.common.sendmail import SendMail
>>> sm = SendMail('MyTheme', 'Hello World!', ['123456789@qq.com', '123456789@outlook.com'])
>>> sm.send()
True

4、添加附件

from django.conf import settings
from django.core.mail import EmailMultiAlternatives


class SendMail:
    """
    :param 邮件主题subject,邮件内容message, 发件人from_email, 收件人地址列表recipient_list, 是否静默发送fail_silently
    :return True or False
    """

    def __init__(self, mail_theme, mail_content, receive_add,):
        self.mail_theme = mail_theme
        self.mail_content = mail_content
        self.receive_add = receive_add

    def send(self, file):
        try:
            msg = EmailMultiAlternatives(
                self.mail_theme,  # 邮件主题
                self.mail_content,  # 邮件内容
                'xxxxxx@example.com',  # 发件人邮件地址
                self.receive_add,  # 收件人邮件地址列表
            )
            msg.attach_alternative(self.mail_content, "text/html")
            msg.attach_file(file)
            msg.send()
            return True
        except Exception as e:
            print(e)
            return False