【发布时间】:2014-11-16 23:36:07
【问题描述】:
前言:我可以在我的服务器上通过命令行(使用send_mail())发送电子邮件。我还可以使用相同的 SMTP 设置从我的localhost 发送电子邮件。此外,我正在使用 django-allauth 进行用户注册......并且它能够发送电子邮件验证电子邮件就好了。
问题:我的服务器上的联系表单没有发送邮件,并且没有引发错误。事实上,send_mail() 正在返回 1(即成功),并且视图正在重定向。
我的 views.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())
还有我的相关forms.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_silently=False 不会导致异常。
EDIT_2:我将视图修改为如下所示:
def form_valid(self, form):
send_mail('Test Subject', 'Test Message', 'test@myemail.com', ['test@recipient.com'])
return HttpResponseRedirect(self.get_success_url())
并且收到一封电子邮件就好了。如您所见,在上面的视图中,没有表单数据传递给send_mail()。
【问题讨论】:
-
你是否在 smtp 连接类型中使用了
dummy? -
不!使用默认的
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -
您是否能够使用您的 smtp 凭据成功发送电子邮件?此外,您在 send_mail 中有一个选项
fail_silently- docs.djangoproject.com/en/dev/topics/email/#send-mail - 你有任何例外吗? -
是的,来自我的本地环境。我使用相同的凭据在本地环境中发送电子邮件。我还在我的服务器上使用来自 shell 的
send_mail()相同的凭据。证件肯定没问题。我将重新启用fail_silently并在第二部分回复您。 -
不...没有例外。