Django - Как отправить по электронной почте заполненную форму вида "создать

Я работаю над приложением для управления недвижимостью, в котором пользователи могут заполнить онлайн-заявку на покупку недвижимости. Я хочу настроить его так, чтобы, когда кто-то заполняет заявку, форма отправлялась по электронной почте администратору в отформатированном виде с метками формы. Есть ли способ отправить по электронной почте всю отформатированную форму с метками или мне придется сделать шаблон электронной почты и пометить его в соответствии с тем, как я хочу, чтобы он выглядел?

Мой пример кода:

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():
    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()

Вы можете посмотреть документ по адресу здесь.

В электронной почте у вас есть два варианта: текстовый и HTML. Если вы хотите получить письмо с ярлыками и в более красивом формате, вам следует выбрать вариант на основе HTML. Как уже говорилось здесь.

Самый быстрый подход - создать templates/generic/_email.html и отобразить его в обход контекстной переменной, как в ListView.

Вернуться на верх