send_mail работает только в терминале в django - PullRequest
0 голосов
/ 04 мая 2020

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

В настоящее время у меня есть следующее в файле settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST_USER = '#'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_PASSWORD = '#'

Конечно, # есть только для этого вопроса

В моем файле html, который у меня есть

 <form method="post">
  {% csrf_token %}
  <button type="submit" name="place_order" class="btn btn-success">
   Place Order</button>
 </form>

place_order связывается с моим views.py, который проверяет, нажата ли кнопка

 checkout = request.POST.get('place_order')
        if checkout:
            send_mail('Django test mail', 'this is django test body', 
            '#', ['#'], fail_silently=False,)
            messages.info(request, f'Your order has been placed!') 

1 Ответ

0 голосов
/ 04 мая 2020

в почтовом запросе нет значения с именем place_order, потому что это button, а не input, поэтому, если оператор будет false и send_mail не будет срабатывать:

 checkout = request.POST.get('place_order')
        if checkout: # <=== here
            send_mail('Django test mail', 'this is django test body', 
            '#', ['#'], fail_silently=False,)
            messages.info(request, f'Your order has been placed!') 

так что если вы измените HTML на что-то вроде:

<form method="post">
  {% csrf_token %}
  <input type="hidden" name="place_order" value="blablabla"/> # value shouldn't be empty
  <button type="submit" class="btn btn-success">
   Place Order</button>
 </form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...