📅  最后修改于: 2023-12-03 15:23:08.469000             🧑  作者: Mango
当我们的 Django 项目需要发送电子邮件时,我们需要进行一些配置。本文将介绍 Django 中设置发送电子邮件的步骤,并提供一些常用的电子邮件发送示例。
首先,我们需要在我们的 Django 项目的 settings.py 文件中配置 EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD。这些参数设置会因为你使用的电子邮件服务提供商而有所区别。
# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'youremail@gmail.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
上面的例子是针对 Gmail 邮箱的。对于其他的电子邮件服务提供商,你需要更新上述配置。
我们需要对 Django 项目中的视图进行设置,以便我们可以从这些视图中发送电子邮件。
我们需要导入以下模块来使用 Django 的电子邮件发送功能:
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
我们需要在视图函数中设置 EMAIL_BACKEND,以便使用 Django 的电子邮件发送功能。
# views.py
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.views.generic import TemplateView
class ContactView(TemplateView):
template_name = 'contact.html'
def post(self, request):
name = request.POST.get('name')
email = request.POST.get('email')
message = request.POST.get('message')
# 电子邮件正文以 HTML 格式编写,因此我们需要将纯文本转换为 HTML
html_message = render_to_string('email_template.html', {'name': name, 'message': message})
# 去除 HTML 正文中的标签以生成纯文本
plain_message = strip_tags(html_message)
# 设置电子邮件主题
subject = 'New Contact Message'
# 设置来自电子邮件和发送电子邮件接收方电子邮件的地址
from_email = 'youremail@gmail.com'
to_email = ['recipient1@example.com', 'recipient2@example.com']
# 使用 Django 的电子邮件发送功能发送电子邮件
email = EmailMessage(subject, plain_message, from_email, to_email, reply_to=[email], headers={'From': name})
email.attach_alternative(html_message, 'text/html')
email.send()
return super(ContactView, self).get(request)
我们需要在 Django 项目的 templates 文件夹中创建一个名为“email_template.html”的文件,其中包含电子邮件的 HTML 正文内容。
<!-- email_template.html -->
<!DOCTYPE html>
<html>
<body>
<p>Hello {{ name }},</p>
<p>You have sent a message:</p>
<blockquote>{{ message }}</blockquote>
<p>Thank you for contacting us.</p>
</body>
</html>
该模板将包含由用户在联系表单中输入的数据。在您自己的项目中,您可以自由修改 HTML 正文,以使其符合您的需求。
另一种电子邮件发送方式是使用 send_mail 函数。
from django.core.mail import send_mail
def contact(request):
name = request.POST.get('name')
email = request.POST.get('email')
message = request.POST.get('message')
# 电子邮件主题
subject = 'New Contact Form Submission'
# 电子邮件正文
body = 'Name: {}\n\nEmail: {}\n\nMessage: {}'.format(name, email, message)
# 发送电子邮件
send_mail(subject, body, email, ['recipient@example.com'], fail_silently=False)
return render(request, 'contact.html')
在 Django 项目中设置发送电子邮件并不困难,只要按照上述步骤进行设置即可。我们可以使用 Django 的电子邮件发送功能充分利用它的优势。使用 send_mail 函数,我们还可以快速轻松地发送电子邮件。如果您有任何问题,请随时在下面留言。