Функция почты не отправляет почту в Django - PullRequest
0 голосов
/ 19 апреля 2019

Я написал код в основных тегах HTML, как и не было никаких проблем. Почта была отправлена ​​правильно. Но когда я сменил место и функция HTML-тегов, почта не сработала. Какая проблема может быть?

Работает

<h1>Contact Us</h1>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="form-actions">
      <button type="submit">Send</button>
    </div>
</form>

Это не работает.

<form class="contact-form" action="" method="GET">
    {% csrf_token %}
    {% for field in form %}
    {{ field|add_class:"input" }}            
    {% endfor %}
    <button class="button" type="submit">Send</button> 
</form>

views.py

def index(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST or None)
        if form.is_valid():
            fullname = form.cleaned_data['fullname']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(fullname, message, from_email, 
                           ['gulnarnecefova1996@gmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('home')
    context['form'] = form
    return render(request, "index.html", context)

1 Ответ

1 голос
/ 19 апреля 2019

Форма, которую вы указали not working:

<form class="contact-form" action="" method="GET">
    {% csrf_token %}
    {% for field in form %}
    {{ field|add_class:"input" }}            
    {% endfor %}
    <button class="button" type="submit">Send</button> 
</form>

Вы можете видеть, что вы использовали method="GET". Тогда в ваших взглядах:

def index(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST or None)
        if form.is_valid():
            fullname = form.cleaned_data['fullname']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(fullname, message, from_email, 
                       ['gulnarnecefova1996@gmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('home')
    context['form'] = form
    return render(request, "index.html", context)

Здесь вы использовали код для отправки почты внутри POST method block как:

    else:
        form = ContactForm(request.POST or None)
        if form.is_valid():
            fullname = form.cleaned_data['fullname']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(fullname, message, from_email, 
                       ['gulnarnecefova1996@gmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('home')

Итак, когда вы отправляете форму, она отправляется как get запрос. И запрос get обрабатывается этим блоком:

    if request.method == 'GET':
        form = ContactForm()

Следовательно, функция рассылки не работает.

Попробуйте изменить метод на post в HTML-форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...