Django 中如何发送带有附件的电子邮件

2023-04-11 00:00:00 电子邮件 带有 附件

在 Django 中,发送带有附件的电子邮件需要使用 Python 的内置模块 smtplibemail。具体步骤如下:

  1. 在 settings.py 中配置邮件服务器的连接参数,例如:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.example.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your_email@example.com'
EMAIL_HOST_PASSWORD = 'your_email_password'
  1. 在 views.py 中导入 django.core.mail 模块,创建邮件对象,并添加附件,例如:
from django.core.mail import EmailMessage
from django.conf import settings
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import os

def send_email_with_attachment(request):
    # 构造邮件体
    subject = '测试邮件-带附件'
    message = '这是一封带有附件的测试邮件'
    from_email = settings.EMAIL_HOST_USER
    to_email = ['receiver@example.com']

    # 构造邮件对象
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = from_email
    msg['To'] = ','.join(to_email)

    # 添加文字内容
    text = MIMEText(message)
    msg.attach(text)

    # 添加附件
    image_path = os.path.join(settings.BASE_DIR, 'static', 'images', 'pidancode.png')
    image_file = open(image_path, 'rb').read()
    image_attach = MIMEImage(image_file)
    image_attach.add_header('Content-Disposition', 'attachment', filename='pidancode.png')
    msg.attach(image_attach)

    # 发送邮件
    try:
        mail = EmailMessage(subject, message, from_email, to_email)
        mail.attach_file(image_path)
        mail.send()
        message = '邮件发送成功'
    except Exception as e:
        message = '邮件发送失败:{}'.format(str(e))

    return HttpResponse(message)

在这个例子中,我们向邮件中添加了一个名为“pidancode.png”的图片作为附件。

注意,要添加附件,需要使用 MIMEImageMIMEApplication 类来创建并添加文件到 MIMEMultipart 对象中,并通过 add_header 方法指定附件的名称和类型。在发送邮件时,可以调用 EmailMessage 对象的 attach_fileattach 方法将附件添加到邮件中。

同时还要注意在 Django 2.2 以后的版本中,邮件正文必须使用 MIMEText 类来创建,而不能简单地将字符串传递给 EmailMessage 对象的 message 参数。

相关文章