Контактная форма Django Python сохраняет файл, но не отправляет письмо

Я пытаюсь создать простую контактную форму с возможностью загрузки файла; я не хочу, чтобы файл был прикреплен к сообщению электронной почты, я просто хочу сохранить файл в /media.

Я использую required=False в форме, чтобы не требовать файл. Но все равно, некоторые из моих логик валидации или обработки формы неверны; код ниже работает, когда я отправляю контактную форму без файла, и я получаю электронное письмо. Но если я прикрепляю файл, файл сохраняется в медиа, но я не получаю письмо, хотя контактная форма правильно отображает thanks.html после отправки формы.

В логах ошибок нет. Ubuntu 20.04; Django 4.0.3; Python 3.8.10; Apache 2.4

contact/contactform/forms.py

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(required=True, widget=forms.TextInput(
        attrs={'class': 'form-control', 'maxlength': '100'}
    ))
    email_address = forms.EmailField(required=True, widget=forms.EmailInput(
        attrs={'class': 'form-control', 'maxlength': '100'}
    ))
    document = forms.FileField(required=False)
    message = forms.CharField(required=True, widget=forms.Textarea(
        attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8}
    ))

contact/contactform/views.py

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

from django.shortcuts import render, get_object_or_404, redirect

from django.core.files.storage import FileSystemStorage

from contactform.forms import ContactForm
from contact.settings import EMAIL_HOST_USER, EMAIL_PORT, EMAIL_HOST_PASSWORD, EMAIL_HOST

def thanks(request):
    return render(request, 'thanks.html', {})

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST,request.FILES)

        request_file = request.FILES['document'] if 'document' in request.FILES else None
        if request_file:
             fs = FileSystemStorage()
             file = fs.save(request_file.name, request_file)
             fileurl = fs.url(file)

        if form.is_valid():
            form_data = form.cleaned_data
            msg = MIMEMultipart()
            msg['From'] = EMAIL_HOST_USER
            msg['To'] = EMAIL_HOST_USER
            msg['Subject'] = f'Site Email'
            message = f'Name: {form_data["name"]}\n' \
                      f'Email address: {form_data["email_address"]}\n\n' \
                      f'{form_data["message"]}'
            msg.attach(MIMEText(message))

            with smtplib.SMTP(EMAIL_HOST, EMAIL_PORT) as server:
                server.ehlo()
                server.starttls()
                server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
                server.sendmail(EMAIL_HOST_USER, EMAIL_HOST_USER, msg.as_string())

            return redirect('contactform:thanks')
    else:
        form = ContactForm()

    return render(request, 'contact.html', { "form": form })

contact/contactform/templates/contact.html

<h2>Form</h2>
        <form action="{% url 'contactform:contact' %}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            {{ form }}
            <button type="submit">Send</button>
        </form>
    
{% endblock %}
Вернуться на верх