Python 无法通过Django联系人表单发送电子邮件
前言:我可以通过服务器上的命令行(使用Python 无法通过Django联系人表单发送电子邮件,python,django,email,Python,Django,Email,前言:我可以通过服务器上的命令行(使用send_-mail())发送电子邮件。我还可以使用相同的SMTP设置从我的localhost发送电子邮件。此外,我正在使用django allauth进行用户注册…它能够发送电子邮件验证电子邮件 问题:邮件不是通过我服务器上的联系人表单发送的,不会引发错误。实际上,send_mail()正在返回1(即成功),视图正在重定向 我的视图.py如下所示: class ContactFormView(FormView): form_class = Con
send_-mail()
)发送电子邮件。我还可以使用相同的SMTP设置从我的localhost
发送电子邮件。此外,我正在使用django allauth进行用户注册…它能够发送电子邮件验证电子邮件
问题:邮件不是通过我服务器上的联系人表单发送的,不会引发错误。实际上,send_mail()
正在返回1
(即成功),视图正在重定向
我的视图.py如下所示:
class ContactFormView(FormView):
form_class = ContactForm
template_name = 'contact.html'
success_url = '/message-sent/'
def form_valid(self, form):
subject = form.cleaned_data.get('subject')
message = "{name} / {email} sent you the following message: ".format(
name=form.cleaned_data.get('name'),
email=form.cleaned_data.get('email')
)
message += "\n\n{0}".format(form.cleaned_data.get('message'))
sender = form.cleaned_data.get('email')
recipients = ['mail1@example.com', 'mail2@example.com']
honeypot = form.cleaned_data.get('phone_number')
if not honeypot:
send_mail(subject, message, sender, recipients)
return HttpResponseRedirect(self.get_success_url())
def form_valid(self, form):
send_mail('Test Subject', 'Test Message', 'test@myemail.com', ['test@recipient.com'])
return HttpResponseRedirect(self.get_success_url())
以及我的相关表单.py:
class ContactForm(forms.Form):
phone_number = forms.CharField(required=False, label='Phone Number (keep this empty, or the form won\'t submit)') # honeypot
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
subject = forms.CharField(required=True)
message = forms.CharField(widget=forms.Textarea)
我是不是错过了一些非常明显的东西
编辑:凭据确实有效(如前所述,它们在我的本地开发环境中有效,我还可以使用相同的凭据从服务器上的shell发送电子邮件)。默认启用fail\u=False不会导致异常
编辑\u 2:我修改了视图,如下所示:
class ContactFormView(FormView):
form_class = ContactForm
template_name = 'contact.html'
success_url = '/message-sent/'
def form_valid(self, form):
subject = form.cleaned_data.get('subject')
message = "{name} / {email} sent you the following message: ".format(
name=form.cleaned_data.get('name'),
email=form.cleaned_data.get('email')
)
message += "\n\n{0}".format(form.cleaned_data.get('message'))
sender = form.cleaned_data.get('email')
recipients = ['mail1@example.com', 'mail2@example.com']
honeypot = form.cleaned_data.get('phone_number')
if not honeypot:
send_mail(subject, message, sender, recipients)
return HttpResponseRedirect(self.get_success_url())
def form_valid(self, form):
send_mail('Test Subject', 'Test Message', 'test@myemail.com', ['test@recipient.com'])
return HttpResponseRedirect(self.get_success_url())
并收到了一封电子邮件。如您所见,在上面的视图中,没有将表单数据传递到send\u mail()
aaa而且……我4个小时调试的来源原来是我的蜜罐。更具体地说,我的浏览器自动完成蜜罐填充
我在本地环境中没有看到问题,因为我的虚拟机浏览器中没有启用自动完成功能。然而,使用我的主机的主浏览器在登台/生产服务器上进行测试时,蜜罐(离屏幕5000px)被填满了
这个答案适用于将来遇到类似问题的任何人
如果您使用蜜罐,并且您的表单没有发送电子邮件,请关闭“自动完成”还要注意,保持你的蜜罐可见(尽管是在屏幕外)意味着它仍然可以由普通用户填充。用JS隐藏它可能是个好主意。您是否有可能在smtp连接类型中使用dummy
?没有!使用默认的EMAIL\u BACKEND='django.core.mail.backends.smtp.EmailBackend'
您是否能够使用smtp凭据成功发送电子邮件?另外,您在发送邮件中有一个选项fail\u summit
——您在那里有任何异常吗?是的,来自我的本地环境。我正在使用相同的凭据在本地环境中发送电子邮件。我还在服务器上使用相同的凭据从shell发送邮件()。资历绝对不错。我将以静默方式重新启用失败,\u
并在第二部分与您联系。不……没有例外。