本文目录导读:

是的,Django 的邮件发送功能支持使用模板,Django 提供了 django.core.mail 模块,你可以结合 Django 的模板系统来生成邮件内容(包括纯文本和 HTML 格式)。
下面介绍具体实现方式。
基本思路
先创建 Django 模板文件,然后在视图中渲染模板并将结果作为邮件内容发送。
具体步骤
第一步:创建模板文件
在 templates/email/ 目录下创建两个模板:
HTML 模板 (welcome_email.html):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; }
.header { background-color: #4CAF50; color: white; padding: 20px; text-align: center; }
.content { padding: 20px; }
</style>
</head>
<body>
<div class="header">
<h1>欢迎加入 {{ site_name }}</h1>
</div>
<div class="content">
<p>亲爱的 {{ username }},</p>
<p>感谢您注册 {{ site_name }}!</p>
<p>请点击以下链接激活您的账户:</p>
<p><a href="{{ activation_url }}">激活账户</a></p>
<p>如果您无法点击链接,请复制以下地址到浏览器:</p>
<p>{{ activation_url }}</p>
<p>祝您使用愉快!</p>
</div>
</body>
</html>
纯文本模板 (welcome_email.txt):
亲爱的 {{ username }},
感谢您注册 {{ site_name }}!
请点击以下链接激活您的账户:
{{ activation_url }}
祝您使用愉快!
第二步:配置邮件设置
在 settings.py 中配置邮件后端(以使用 SMTP 为例):
# 邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your-email@gmail.com' EMAIL_HOST_PASSWORD = 'your-password' DEFAULT_FROM_EMAIL = 'Your Site <noreply@yoursite.com>'
第三步:编写发送邮件的函数
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
def send_welcome_email(user_email, username):
# 模板上下文
context = {
'username': username,
'site_name': 'My Awesome Site',
'activation_url': f'https://example.com/activate/{username}/',
}
# 渲染模板
html_content = render_to_string('email/welcome_email.html', context)
text_content = strip_tags(html_content) # 或者使用纯文本模板
# 创建邮件对象(支持 HTML 和纯文本两种格式)
email = EmailMultiAlternatives(
subject='欢迎注册!', # 邮件主题
body=text_content, # 纯文本内容
from_email='noreply@example.com', # 发件人(可选,默认使用 DEFAULT_FROM_EMAIL)
to=[user_email], # 收件人列表
)
email.attach_alternative(html_content, "text/html") # 附加 HTML 版本
# 发送邮件
email.send(fail_silently=False)
第四步:在视图中调用
from django.shortcuts import render
def register(request):
if request.method == 'POST':
# 处理注册逻辑...
username = request.POST.get('username')
email = request.POST.get('email')
# 发送欢迎邮件
send_welcome_email(email, username)
return render(request, 'registration_success.html')
return render(request, 'register.html')
其他常用方式
使用 send_mail 发送纯文本邮件(带模板)
from django.core.mail import send_mail
from django.template.loader import render_to_string
def send_simple_email(to_email, username):
context = {'username': username}
message = render_to_string('email/simple_email.txt', context)
send_mail(
'通知',
message,
'from@example.com',
[to_email],
fail_silently=False,
)
发送带附件的邮件
from django.core.mail import EmailMessage
def send_email_with_attachment(to_email, pdf_path):
email = EmailMessage(
'带附件的邮件',
'请查收附件。',
'from@example.com',
[to_email],
)
email.attach_file(pdf_path) # 附件
email.send()
开发环境测试
在开发阶段,可以配置邮件输出到控制台,避免实际发送邮件:
# settings.py 开发环境 EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
这样所有邮件内容会打印到终端,方便调试。
最佳实践建议
- 总是提供纯文本版本:部分邮件客户端不支持 HTML,纯文本版本作为备选
- 使用
EmailMultiAlternatives:同时支持 HTML 和纯文本 - 模板放在
templates/email/目录:组织清晰 - 模板使用
.html和.txt扩展名:区分格式 - 处理异常:在发送时捕获连接错误、认证失败等异常
这样,Django 就能完美支持模板化的邮件发送了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播