📜  在 Django 项目中设置发送电子邮件(1)

📅  最后修改于: 2023-12-03 15:23:08.469000             🧑  作者: Mango

在 Django 项目中设置发送电子邮件

当我们的 Django 项目需要发送电子邮件时,我们需要进行一些配置。本文将介绍 Django 中设置发送电子邮件的步骤,并提供一些常用的电子邮件发送示例。

配置 EMAIL_HOST 用户名和密码

首先,我们需要在我们的 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

我们需要在视图函数中设置 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 进行电子邮件发送

另一种电子邮件发送方式是使用 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 函数,我们还可以快速轻松地发送电子邮件。如果您有任何问题,请随时在下面留言。