Контактная форма Django не отправляет письмо - PullRequest
0 голосов
/ 13 октября 2019

У меня есть простая контактная форма, настроенная на моей странице о программе, и после заполнения полей и нажатия кнопки «Отправить» я получаю «Успех!»сообщение о том, что письмо было отправлено. Тем не менее, электронная почта никогда не поступает в мой почтовый ящик.

Я читал здесь множество постов об этой проблеме (кажется, довольно распространенной), но все, что я пробовал, не работает;даже при использовании django.core.mail.backends.console.EmailBackend не удается распечатать в консоли, но я все равно получаю «Успех!»сообщение при отправке.

Мои settings.py:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

SECRET_KEY = os.getenv("SECRET_KEY")

DEBUG = True

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.live.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xxxx@hotmail.com'
EMAIL_HOST_PASSWORD = os.environ['EMAIL_PASSWORD']
...

Мои views.py:

...
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
from django.shortcuts import redirect
from .forms import ContactForm
...
class AboutPage(TemplateView):
    template_name = 'database/templates/about.html'

def about(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(subject, message, from_email, ['xxxx@hotmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('success')
    return render(request, 'about.html', {'form': form})

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

Мои urls.py:

from django.urls import path
from . import views

urlpatterns = [
    ...
    path('about/', views.about, name='about'),
    path('success/', views.success, name='success'),
    ...
    ]

Мой шаблон about.html:

{% extends "base.html" %}

{% block content %}
...
  <h3>Contact</h3>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="form-actions">
      <button type="submit">Send</button>
    </div>
  </form>
...
{% endblock %}

И мой шаблон success.html:

{% extends "base.html" %}

{% block content %}
...
  <h1>Success!</h1>
  <p>Thank you for your message!</p>
...
{% endblock %}

Чего мне не хватает? Буду признателен за любой совет.

РЕДАКТИРОВАТЬ

После запуска django-shell, согласно предложению @ YevheniiM, вот что я получил (это было слишком долго для публикации вкомментарии):

[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail
>>> send_mail('subject', 'message', 'example@example.org', ['test@example.org'])
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: subject
From: example@example.org
To: test@example.org
Date: Sun, 13 Oct 2019 23:33:35 -0000
Message-ID: <157100961593.25849.16400852689643226474@localhost>

message
-------------------------------------------------------------------------------
1
>>> 

РЕДАКТИРОВАТЬ 2

[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail
>>> send_mail('subject', 'message', 'example@example.org', ['test@example.org'])
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/meganmccarty/.virtualenvs/django3/lib/python3.7/site-packages/django/core/mail/__init__.py", line 60, in send_mail
    return mail.send()
  File "/home/meganmccarty/.virtualenvs/django3/lib/python3.7/site-packages/django/core/mail/message.py", line 291, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/meganmccarty/.virtualenvs/django3/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 103, in send_messages
    new_conn_created = self.open()
  File "/home/meganmccarty/.virtualenvs/django3/lib/python3.7/site-packages/django/core/mail/backends/smtp.py", line 70, in open
    self.connection.login(self.username, self.password)
  File "/usr/lib/python3.7/smtplib.py", line 730, in login
    raise last_exception
  File "/usr/lib/python3.7/smtplib.py", line 721, in login
    initial_response_ok=initial_response_ok)
  File "/usr/lib/python3.7/smtplib.py", line 642, in auth
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.3 Authentication unsuccessful [MN2PR01CA0032.prod.exchangelabs.com]')
>>> 

РЕДАКТИРОВАТЬ 3 Для всех, кто читает это, оказывается, что pythonanywhere и hotmail(оба из которых я пытался использовать здесь) не работают вместе. Спасибо за решение этой проблемы, @YevheniiM! После перехода на учетную запись gmail все работает отлично!

...