Django联系电子邮件不起作用

时间:2016-05-12 19:34:12

标签: django email

我的Django网站上有一个联系表单,提交后会转到成功网址,但不会发送电子邮件,也不会调用form_valid函数中设置的日志记录。

以下是视图的代码:

class ContactView(FormView):
    form_class = ContactForm
    template_name = "contact.html"
    success_url = "/contact-sent/"

    def form_valid(self, form):
        message = "{name} / {email} said: ".format(
            name=form.cleaned_data.get('name'),
            email=form.cleaned_data.get('email'))
        message += "\n\n{0}".format(form.cleaned_data.get('message'))
        recipients = [recipient for recipient in settings.LIST_OF_EMAIL_RECIPIENTS]
        try:
            send_mail(
            subject=form.cleaned_data.get('subject').strip(),
            message=message,
            from_email='XXX@XXX.com'
            recipient_list=recipients,
            )
            logger = logging.getLogger(__name__)
            logger.info("Contact Email sent successfully")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warning("Contact Email failed to send\nInfo: %s" % e)

        return super(ContactView, self).form_valid(form)

和表单,这是一个使用floppyforms和crispyforms的模型形式:

class ContactForm(ffuture.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'id-contactForm'
        self.helper.form_class = 'contact-form'
        self.helper.form_method = 'post'
        self.helper.form_action = 'submit-feedback'
        self.helper.form_tag = True
        self.helper.layout = Layout(
            Fieldset(
                _('Contact Us'),
                Field('name', placeholder=_('Name'), css_class='input-medium'),
                Field('email', placeholder=_('Email'), css_class='input-xlarge'),
                Field('subject', placeholder=_('Subject'), css_class='input-xlarge'),
                Field('message', placeholder=_('Add a message'), rows='5', css_class='input-xlarge'),
            ),
        )
        self.helper.add_input(Submit('submit', _('Submit')))

    class Meta:
        model = Feedback
        fields = ('name', 'email', 'subject', 'message')

和模型:

@python_2_unicode_compatible
class Feedback(models.Model):
    subject = models.CharField(max_length=100)
    message = models.TextField(max_length=500)
    name = models.CharField(max_length=100)
    email = models.EmailField()
    creation_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.topic

    class Meta:
        verbose_name_plural = _("Feedback")
        verbose_name = _("Feedback")

永远不会发送电子邮件,并且管理员永远不会更新反馈模型。

任何人都有任何关于为什么会发生这种情况的想法?我一直在倾注代码并查看其他示例,其中没有一个与我所拥有的有很大不同。我很难过为什么它不发送电子邮件,也没有调用form_valid方法中的任何日志记录。

理想情况下,我希望它将联系电子邮件发送给收件人,并将输入的信息保存到反馈模型中。

另外两件可能相关的事情:

该网站目前正在Apache上运行,对于视图中设置的from_email,我从未为其配置任何凭据。我不确定在哪里这样做。但即使这是电子邮件未被发送的原因,我也不明白为什么反馈模型不会更新。

感谢你们提供的任何帮助,我现在已经坚持了一段时间。

编辑:

我认为可能是send_mail函数是问题所在,但是我在try块上面添加了日志记录并且没有调用,所以我现在确定从不调用form_valid方法。

至于没有保存的反馈模型,我意识到这可能是因为我从未真正保存过表单。

我在这里有点困惑,因为我正在使用联系人的模型表单,因此提交表单的用户没有登录。目的是发送电子邮件,并将结果存储在数据库中。但我似乎无法弄清楚如何在没有有效用户的情况下保存模型。

仅仅做

就足够了
feedback = form.save()

在ContactView中的form_valid方法中?或者我想在我的模型表单中使用保存方法吗?

1 个答案:

答案 0 :(得分:0)

解决方案是只致电

form.save()

并存储模型。登录的用户没有关系,因为模型上的字段根本不引用登录的用户。

相关问题