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
并在第二部分与您联系。不……没有例外。