Django 中如何发送带有附件的电子邮件
在 Django 中,发送带有附件的电子邮件需要使用 Python 的内置模块 smtplib
和 email
。具体步骤如下:
- 在 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'
- 在 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”的图片作为附件。
注意,要添加附件,需要使用 MIMEImage
或 MIMEApplication
类来创建并添加文件到 MIMEMultipart
对象中,并通过 add_header
方法指定附件的名称和类型。在发送邮件时,可以调用 EmailMessage
对象的 attach_file
或 attach
方法将附件添加到邮件中。
同时还要注意在 Django 2.2 以后的版本中,邮件正文必须使用 MIMEText
类来创建,而不能简单地将字符串传递给 EmailMessage
对象的 message
参数。
相关文章