【问题标题】:contact form send email success but no message in my email box - django联系表格发送电子邮件成功,但我的邮箱中没有消息 - django
【发布时间】:2020-11-20 17:45:19
【问题描述】:

我为我的网站的联系页面创建了以下 django 联系表。表单的问题在于,当用户填写并单击提交按钮时,它会显示成功消息,但不会发送电子邮件。我的意思是我的邮箱里没有收到消息 有人可以检查并告诉我哪里出错了。

forms.py:

from django import forms
from django.forms import ModelForm

# contact form
class ContactForm(forms.Form):
    contact_name = forms.CharField(required=True )

    contact_email = forms.EmailField(required=True )

    title = forms.CharField(required=True)

    content = forms.CharField(required=True )

views.py:

def contact(request):
    Contact_Form = ContactForm
    if request.method == 'POST':
        form = Contact_Form(data=request.POST)

        if form.is_valid():
            contact_name = request.POST.get('contact_name')
            contact_email = request.POST.get('contact_email')
            contact_content = request.POST.get('content')
            title = request.POST.get('title')

            template = loader.get_template('website_primary_html_pages/contact_form.txt')
            context = {
                'contact_name' : contact_name,
                'contact_email' : contact_email,
                'title' : title,
                'contact_content' : contact_content,

            }

            content = template.render(context)

            email = EmailMessage(
                "Hey , There are new Message from blog",
                content,
                "Creative web" + '',
                ['contact@techpediaa.com'],
                headers = { 'Reply To': contact_email }
            )

            email.send()


            return redirect('Success')
    return render(request, 'website_primary_html_pages/contact_us.html', {'form':Contact_Form })

#end contact form

settings.py:

#MY EMAIL SETTING
DEFAULT_FROM_EMAIL = 'contact@techpediaa.com'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

当用户填写所有字段时,它显示消息发送成功,但我没有收到任何消息,原因

  • 我使用 namecheap 作为主机

我在 settings.py 中的新设置:

#MY EMAIL SETTING
EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'contact.techpediaa.com'
EMAIL_USE_TLS=False
EMAIL_PORT = 587 
EMAIL_HOST_USER = 'contact@techpediaa.com'
EMAIL_HOST_PASSWORD = 'mypass'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

【问题讨论】:

  • 可能是垃圾邮件?
  • 不,我查过了,没有消息

标签: django django-rest-framework django-views


【解决方案1】:

是的,您可以将它用于 Cpanel。

Cpanel 的流程与 google 相同。您需要在 Cpanel 中创建应用密码

EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'your_mail.your_domain_of_Cpanel'
EMAIL_USE_TLS=True
EMAIL_PORT = 587 
EMAIL_HOST_USER = 'email'
EMAIL_HOST_PASSWORD = 'app_password'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

立即尝试

如果 EMAIL_USE_TLS 出现任何类型的错误,则将其编辑为 False

【讨论】:

  • 再次感谢您的帮助,它说同样的错误,它显示消息发送成功但没有收到消息,当我检查日志时它显示它已经发送并且没有问题,为什么会这样发生
【解决方案2】:

您没有在收件箱中收到电子邮件,因为您使用的是django.core.mail.backends.console.EmailBackend - 正如您所看到的,它只会在控制台中输出电子邮件。你在那儿看到了吗?

SMTP Backend 是您所需要的。

【讨论】:

  • 是的,您在控制台中是对的,它出现但没有收到任何消息,我尝试了@Progam 回答并删除了 django.core.mail.backends.console.EmailBackend 行,但它显示了新错误: socket.gaierror: [Errno -2] Name or service not known
  • 您是否直接使用了`EMAIL_HOST = 'your_mail.your_domain_of_Cpanel'?你通过什么电子邮件主机?
  • 你能再看看我的问题吗,因为我编辑了它,你可以看到我的新设置
  • 你使用docker吗?你能ping通吗? ping contact.techpediaa.com
  • 它说:Ping request could not find host contact.techpediaa.com. Please check the name and try again.
猜你喜欢
  • 2018-05-16
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多