почему Django возвращает ошибку BadHeaderError при добавлении новой строки в поле «сообщение» моей страницы «Контакт» - PullRequest
0 голосов
/ 21 апреля 2020

Все работает, за исключением случаев, когда я добавляю новую строку с помощью «enter» в поле «Сообщение». Это происходит, если я не добавляю новые строки в текстовое поле сообщения.

Что мне здесь не хватает? Пытался решить эту проблему в течение 2 дней, ничего похожего на Google.

Я чувствую, что может быть проблема моей конфигурации views.py:

def success(request):
    return render(request, 'home/success.html')

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # send email code goes here
            sender_name = form.cleaned_data['name']
            sender_email = form.cleaned_data['email']
            sender_phone = form.cleaned_data['phone']
            sender_message = form.cleaned_data['message']
            subject = "Enquiry: {0}".format(sender_message[:50])
            message = "New message from {0}\n phone number: {1}\n email: {2}\n\n{3}".format(sender_name, sender_phone, sender_email, sender_message)
            recipients = ['john.smith@gmail.com']
            sender = "{0}<{1}>".format(sender_name, sender_email)
            try:
                send_mail(subject, message, sender, recipients, fail_silently=False)
            except BadHeaderError:
                return HttpResponse('Invalid header found')
            return HttpResponseRedirect('success')
    else:
        form = ContactForm()

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

Есть идеи?

1 Ответ

1 голос
/ 23 апреля 2020

Как описано в документации , значение BadHeaderError повышается для «защиты от вставки заголовка путем запрета новых строк в значениях заголовка».

Поскольку вы копируете часть sender_message непосредственно в заголовок subject, возможно, вы добавляете и новые строки. Простое решение - сначала убрать их.

sender_message = form.cleaned_data['message']
clean_message = sender_message.replace('\n', '').replace('\r', '')
subject = "Enquiry: {0}".format(clean_message[:50])
...