首页 > 解决方案 > /sendEmail/'file' 处的 MultiValueDictKeyError

问题描述

我正在尝试在我的 Django 项目中通过电子邮件发送附件。但是我遇到了这样的错误。我知道以前问过这个问题,但他们已经快 10 岁了,其中一些甚至没有回答。

我的代码如下:

Django=3.2.7
django-crispy-forms==1.12.0

视图.py

# send email
def sendMail(request):
    message = request.POST.get("message", "")
    subject = request.POST.get("subject", "")
    receivers = request.POST.get("email", "")
    email = EmailMessage(subject, message, settings.EMAIL_HOST_USER, [receivers])
    email.content_subtype = "html"

    file = request.FILES["file"]
    #file = request.POST.get("file")
    email.attach(file.name, file.read(), file.content_type)
    
    email.send()
    return HttpResponse(f"Sent to {receivers}")

表格.py

class EmailForm(forms.Form):
    # receivers email
    email = forms.EmailField()
    subject = forms.CharField(max_length=100)
    file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
    message = forms.CharField(widget = forms.Textarea)

模型.py

# for sending email
class EmailReportModel(models.Model):
    """
    this model created just for email foreignKey
    """
    #receiver_emails = models.ForeignKey(BolgeMailListeleri, on_delete=models.CASCADE, related_name = "receiver_emails")
    receiver_emails = models.ManyToManyField(BolgeMailListeleri)

    subject = models.CharField(max_length=255, default="")
    message = models.TextField()
    upload = models.FileField(upload_to='uploads', null=True, blank=True)
    #upload = models.Field()
    #image1 = forms.Field(label='sample photo', widget = forms.FileInput,    required = True )

发送电子邮件.html

{% load crispy_forms_tags %}
<div class="main">
    <!-- Create a Form -->
    <form method="post" enctype="multipart/form-data">
        <!-- Security token by Django -->
        {% csrf_token %}
        {{ form|crispy }}
    <button type="submit">Gönder</button>
    </form>
    <button onclick="goBack()" class="btn btn-danger">İptal Et</button>

</div>

<script>
    function goBack() {
      window.history.back();
    }
</script>

设置.py

# need an actual email
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_HOST_USER = "mygmail@gmail.com"
EMAIL_HOST_PASSWORD = "****"
EMAIL_USE_TLS = True

网址.py

urlpatterns = [
    path('sendEmail', sendMail, name='send-email'),
]

标签: pythonpython-3.xdjangodjango-modelsdjango-forms

解决方案


推荐阅读