Django - 你如何通过电子邮件发送完成的创建视图表单

Django - How do you email a completed create view form

我正在开发一个 属性 管理应用程序,用户可以在其中填写 属性 的在线申请。我想设置它,以便当有人填写申请表时,表格会通过电子邮件发送给管理员,并使用表格标签进行格式化。有没有一种方法可以通过电子邮件发送带有标签的整个格式化表单,或者我是否必须制作一个电子邮件模板并根据我想要的外观对其进行标记?

我的示例代码:

class ApplicationView(CreateView):
    redirect_field_name = ''
    form_class = ApplicantForm
    model = Applicant
    template_name = 'base/application.html'

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        subject = 'New Application - {} {}'.format(
            form.cleaned_data.get('first_name'),
            form.cleaned_data.get('last_name'),
        )
        message = '{} {}'.format(
            form.cleaned_data.get('first_name'),
            form.cleaned_data.get('last_name'),
        )
        Application_Alert(subject, message)
        return super().form_valid(form)

我们需要 2 个步骤:

  • 在您的 settings.py 中,添加您的电子邮件信息:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.example.com'
EMAIL_HOST_USER = 'example@mail.com'
EMAIL_HOST_PASSWORD = '******'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
  • 在您的 views.py 中,导入您的设置:
from django.conf import settings as my_settings
from django.core.mail import EmailMultiAlternatives

def your_def(request):
    subject = f"{request.user} send subject"
    from_email = my_settings.EMAIL_HOST_USER
    to_email = ['admin@gmail.com', 'admin2@gmail.com'...] 
    text_content = 'This is an important message.'
    # Add your email template here
    html_content = '<p>This is an <strong>important</strong> message.</p>'
    msg = EmailMultiAlternatives(subject, text_content, from_email, to_email)
    msg.attach_alternative(html_content, "text/html")
    msg.send()

您可以在 here 查看文档。

对于电子邮件,您有两种选择:基于文本的电子邮件和基于 HTML 的电子邮件。因此,如果您想要一封带有标签和更好看格式的电子邮件,您必须选择基于 HTML 的选项。如前所述 here.

最快的方法是创建一个 templates/generic/_email.html 并像在 ListView 中一样绕过上下文变量呈现它。