Python Django联系人表单未发送电子邮件
我在我的about页面上设置了一个简单的联系表单,在填写字段并单击submit之后,我收到一条“Success!”消息,表明电子邮件已发送。然而,电子邮件从未到达我的收件箱 我在这里读了很多关于这个问题的帖子(似乎很常见),但我尝试的一切都不起作用;即使使用Python Django联系人表单未发送电子邮件,python,django,email,django-forms,contact-form,Python,Django,Email,Django Forms,Contact Form,我在我的about页面上设置了一个简单的联系表单,在填写字段并单击submit之后,我收到一条“Success!”消息,表明电子邮件已发送。然而,电子邮件从未到达我的收件箱 我在这里读了很多关于这个问题的帖子(似乎很常见),但我尝试的一切都不起作用;即使使用django.core.mail.backends.console.EmailBackend也无法在控制台中打印,但提交时仍会收到“Success!”消息 My settings.py: import os BASE_DIR = os.pa
django.core.mail.backends.console.EmailBackend
也无法在控制台中打印,但提交时仍会收到“Success!”消息
My 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']
...
My 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')
My URL.py:
from django.urls import path
from . import views
urlpatterns = [
...
path('about/', views.about, name='about'),
path('success/', views.success, name='success'),
...
]
My 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 %}
{% extends "base.html" %}
{% block content %}
...
<h1>Success!</h1>
<p>Thank you for your message!</p>
...
{% endblock %}
{%extends“base.html”%}
{%block content%}
...
接触
{%csrf_令牌%}
{{form.as_p}}
发送
...
{%endblock%}
以及我的success.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 %}
{% extends "base.html" %}
{% block content %}
...
<h1>Success!</h1>
<p>Thank you for your message!</p>
...
{% endblock %}
{%extends“base.html”%}
{%block content%}
...
成功!
谢谢你的留言
...
{%endblock%}
我错过了什么?如有任何建议,将不胜感激
编辑
在运行django shell之后,根据@yevhenim的建议,以下是我得到的(太长了,无法在评论中发布):
linux上的[GCC 5.4.0 20160609]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
(InteractiveConsole)
>>>从django.core.mail导入发送邮件
>>>发送邮件('主题','消息','example@example.org', ['test@example.org'])
内容类型:文本/纯文本;charset=“utf-8”
MIME版本:1.0
内容传输编码:7bit
主题:主题
发件人:example@example.org
致:test@example.org
日期:2019年10月13日星期日23:33:35-0000
消息ID:
消息
-------------------------------------------------------------------------------
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]')
>>>
linux上的[GCC 5.4.0 20160609]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
(InteractiveConsole)
>>>从django.core.mail导入发送邮件
>>>发送邮件('主题','消息','example@example.org', ['test@example.org'])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/meganmcarty/.virtualenvs/django3/lib/python3.7/site packages/django/core/mail/_init__.py”,第60行,在发送邮件中
返回邮件。发送()
文件“/home/meganmcarty/.virtualenvs/django3/lib/python3.7/site packages/django/core/mail/message.py”,第291行,在send中
返回self.get\u连接(以静默方式失败)。发送消息([self])
文件“/home/meganmcarty/.virtualenvs/django3/lib/python3.7/site packages/django/core/mail/backends/smtp.py”,第103行,发送消息
新建连接创建=self.open()
文件“/home/meganmcarty/.virtualenvs/django3/lib/python3.7/site packages/django/core/mail/backends/smtp.py”,第70行,打开
self.connection.login(self.username、self.password)
文件“/usr/lib/python3.7/smtplib.py”,第730行,登录
引发最后一个异常
文件“/usr/lib/python3.7/smtplib.py”,第721行,登录
初始响应(正常=初始响应(正常)
文件“/usr/lib/python3.7/smtplib.py”,第642行,在auth中
引发SMTPAuthenticationError(代码,resp)
smtplib.SMTPAuthenticationError:(535,b'5.7.3身份验证未成功[MN2PR01CA0032.prod.exchangelabs.com])
>>>
编辑3
对于任何阅读本文的人来说,pythonanywhere和hotmail(我在这里尝试使用这两个)并不能一起工作。谢谢你解决了这个问题,@yevhenim!在切换到使用gmail帐户后,一切都很顺利 当您尝试使用
django.core.mail.backends.console.EmailBackend
时,电子邮件也不会到达您的控制台?您的尝试。。。除了
零件不起作用,因为您只检查了BadHeaderError
。所以你总是能看到成功的页面。尝试将代码更改为,例外情况除外,如e:print(e)
,并查看输出。@Toankocho是的,当尝试django.core.mail.backends.console.EmailBackend
时,控制台中不会打印任何内容。我意识到这可能是因为我正在使用PythonAnywhere来编写我的web应用程序,而没有在我的本地计算机上使用该web应用程序machine@megan因为您使用Pythonywhere,并且看不到development server控制台,所以您需要在settings.py
中设置LOGGING
,以将日志存储在某个文件中,以便以后阅读(有关详细信息,请参阅)。或者您可以为此目的进行设置。@Toankocho:谢谢您的回复!虽然我已经了解了gmail的所有功能,但我感谢您抽出时间对我的问题进行评论。我一定会考虑设置日志记录程序