Python 在Django中处理联系人表单,未发送电子邮件
我有一个应用程序,用户可以通过填写表格与我联系,在表格中用户只需填写他的详细信息、电子邮件和主题 代码没有抛出错误,但在设置完所有内容后,我无法接收邮件,但联系人详细信息会存储在数据库中,因为我希望存储它 下面是我的代码 型号.pyPython 在Django中处理联系人表单,未发送电子邮件,python,django,sendmail,Python,Django,Sendmail,我有一个应用程序,用户可以通过填写表格与我联系,在表格中用户只需填写他的详细信息、电子邮件和主题 代码没有抛出错误,但在设置完所有内容后,我无法接收邮件,但联系人详细信息会存储在数据库中,因为我希望存储它 下面是我的代码 型号.py class Contact(models.Model): name = models.CharField(max_length=100) message = models.TextField() sender = models.EmailFi
class Contact(models.Model):
name = models.CharField(max_length=100)
message = models.TextField()
sender = models.EmailField()
phone = models.CharField(max_length=10)
cc_myself = models.BooleanField(blank=True)
time = models.DateTimeField(auto_now_add=True, db_index=True)
def __str__(self):
return 'Message for {}'.format(self.sender)
Forms.py
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['name', 'sender', 'phone', 'message', 'cc_myself']
def contact(request):
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = contact_form.cleaned_data['name']
message = contact_form.cleaned_data['message']
sender = contact_form.cleaned_data['sender']
phone = contact_form.cleaned_data['phone']
cc_myself = contact_form.cleaned_data['cc_myself']
recipients = ['xxxx@gmail.com']
if cc_myself:
recipients.append(sender)
send_mail(name, message, sender, recipients)
contact_form.save()
messages.success(request, 'Message sent successfully')
return redirect('contact:contact')
else:
messages.error(request, 'Error sending your Message')
else:
contact_form = ContactForm(request.POST)
context = {
"contact_form": contact_form,
}
template = 'contact.html'
return render(request, template, context)
视图.py
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['name', 'sender', 'phone', 'message', 'cc_myself']
def contact(request):
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = contact_form.cleaned_data['name']
message = contact_form.cleaned_data['message']
sender = contact_form.cleaned_data['sender']
phone = contact_form.cleaned_data['phone']
cc_myself = contact_form.cleaned_data['cc_myself']
recipients = ['xxxx@gmail.com']
if cc_myself:
recipients.append(sender)
send_mail(name, message, sender, recipients)
contact_form.save()
messages.success(request, 'Message sent successfully')
return redirect('contact:contact')
else:
messages.error(request, 'Error sending your Message')
else:
contact_form = ContactForm(request.POST)
context = {
"contact_form": contact_form,
}
template = 'contact.html'
return render(request, template, context)
gmail服务器
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'xxx@gmail.com'
EMAIL_HOST_PASSWORD = 'xxxx'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
终端输出
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Subject: adie Ugbe
From: abcd@gmail.com
To: xxxx@gmail.com
Date: Sun, 07 Jan 2018 11:11:10 -0000
Message-ID: <20180107111110.29855.10393@1.0.0.127.in-addr.arpa>
oh oh no ooo dddddddd se skan
-------------------------------------------------------------------------------
Successful
MIME版本:1.0
内容类型:文本/纯文本;charset=“utf-8”
内容传输编码:7bit
主题:adie Ugbe
发件人:abcd@gmail.com
致:xxxx@gmail.com
日期:2018年1月7日星期日11:11:10-0000
消息ID:
哦,哦,不,哦,dddddd-se-skan
-------------------------------------------------------------------------------
成功的
当我配置它时。它成功地向我发送电子邮件。我已经完成了代码,请看。有关代码,请访问链接:
settings.py:
INSTALLED_APPS = [
'user',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
STATIC_URL = '/static/'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'xxxxx@gmail.com'
EMAIL_HOST_PASSWORD = 'xxxxxxx'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
views.py:
from django.shortcuts import render,redirect
from user.models import *
from django.core.mail import send_mail
from user.forms import *
def contact(request):
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = contact_form.cleaned_data['name']
message = contact_form.cleaned_data['message']
sender = contact_form.cleaned_data['sender']
phone = contact_form.cleaned_data['phone']
cc_myself = contact_form.cleaned_data['cc_myself']
recipients = ['xxxxx@gmail.com']
if cc_myself:
recipients.append(sender)
send_mail(name, message, sender, recipients)
contact_form.save()
print('Successful')
return redirect('contact')
else:
print('Fails')
else:
contact_form = ContactForm(request.POST)
context = {
"contact_form": contact_form,
}
template = 'contact.html'
return render(request, template, context)
models.py:
from django.db import models
class Contact(models.Model):
name = models.CharField(max_length=100)
message = models.TextField()
sender = models.EmailField()
phone = models.CharField(max_length=10)
cc_myself = models.BooleanField(blank=True)
time = models.DateTimeField(auto_now_add=True, db_index=True)
def __str__(self):
return 'Message for {}'.format(self.sender)
contact.html:
<form method="post">
{% csrf_token %}
{{contact_form.as_p}}
<input type="submit" name="" value="submit">
</form>
{%csrf_令牌%}
{{contact_form.as_p}}
首先,您缺少了电子邮件\u后端
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
从您的输出,它清楚地表明电子邮件正在登录到控制台,这意味着发送过程正在您的控制台上模拟。这从技术上说就是发送电子邮件 无论如何,我怀疑这是因为您的电子邮件后端设置为
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
您需要做的是将电子邮件后端更改为:
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
这就是诀窍
Django在后台作业中发送电子邮件,如果要使用外部作业管理器,则必须正确设置此环境变量。使用fail_静默=False进行测试,在send_mail功能中,send_mail(名称、消息、发件人、收件人、fail_静默=False)将引发smtplib.SMTPException。可能是smtp服务器的异常。您是否已选中邮箱中的“垃圾邮件”文件夹?是。它不在那里。即使是在发送电子邮件的已发送邮件中,也不要搜索其他答案:确保在设置中:EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'找到问题。我意识到我的设置文件中有
EMAIL\u BACKEND='django.core.mail.backends.console.EmailBackend'
。移除它修复了问题。它与SMTP冲突您与OP的不同之处是什么?我刚刚用我自己的gmail帐户尝试了此代码,它正在工作…EMAIL\u HOST\u USER='我的gmail帐户',EMAIL\u HOST\u PASSWORD='我的密码',recipients=['收件人电子邮件地址',]ContactForm没有属性save。请下载我的项目并将其运行到您的服务器。我使用Python3和Django1.11TLS版本。