python - send_email 在 django 中不起作用?

标签 python django

我编写了一个通过 django 发送邮件的应用程序

模型.py

from django.db import models

from django import forms

class EmailForm(forms.Form):

      firstname = forms.CharField(max_length=255)

      lastname = forms.CharField(max_length=255)

      email = forms.EmailField()

      subject = forms.CharField(max_length=255)

      botcheck = forms.CharField(max_length=5)

      message = forms.CharField()

View .py

from django.views.generic.base import TemplateView

from django.http import HttpResponseRedirect

from django.core.mail import send_mail, BadHeaderError

from models import EmailForm

from django.shortcuts import render

def sendmail(request):

    if request.method == 'POST':
      form = EmailForm(request.POST)
      if form.is_valid():
        firstname = form.cleaned_data['firstname']
        lastname = form.cleaned_data['lastname']
        email = form.cleaned_data['email']
        subject = form.cleaned_data['subject']
        botcheck = form.cleaned_data['botcheck'].lower()
        message = form.cleaned_data['message']
        if botcheck == 'yes':
         try:
            fullemail = firstname + " " + lastname + " " + "<" + email + ">"
            send_mail(subject, message, email, ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e18c98848c80888da1868c80888dcf828e8c" rel="noreferrer noopener nofollow">[email protected]</a>'], fail_silently=False)
            return HttpResponseRedirect('/email/thankyou/')
         except:
            return HttpResponseRedirect('/email/')
        else:
          return HttpResponseRedirect('/email/')
    else:
        return HttpResponseRedirect('/email/') 

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

它显示在控制台中。

但是当

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

它不会将电子邮件发送给指定的用户。 我的settings.py文件

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

EMAIL_USE_TLS   = True
EMAIL_HOST      =  'localhost'

EMAIL_PORT      = '8000'

如何发送电子邮件?

最佳答案

您已将您的电子邮件主机指定为 localhost 将其更改为可靠的电子邮件主机,例如 gmail。您的 settings.py 可以具有以下给定的设置来使用 gmail smtp 服务器发送电子邮件。您还必须更改端口。

EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="becbcddbccd0dfd3dbfed9d3dfd7d290ddd1d3" rel="noreferrer noopener nofollow">[email protected]</a>'
EMAIL_HOST_PASSWORD = 'password'

如果问题仍然存在,您必须允许安全性较低的应用访问您的 Gmail 帐户。这是 Gmail 最近对其帐户访问策略所做的更改。默认情况下,只有合格的域才能使用 gmail 身份验证 (OAUTH2) 机制发送电子邮件。要允许安全性较低的应用访问您的 Gmail 帐户,您必须登录 Google 开发者控制台。

关于python - send_email 在 django 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109391/

相关文章:

javascript - 如何通过 javascript 从管理页面检索 Django 模型 ID

python - 使 von Mises KDE 适应 Seaborn

python - 在 Anaconda 中安装和使用 scikit-learn 的问题

c++ - 从自定义构建的 Python 导入自定义模块失败

python - 在 Django 模型中表示工作日的多选字段

django - 在 Django 管理页面中从应用程序注册每个表/类

python - 寻找使用 numpy 根据出现次数对 3d 数组进行下采样的最快方法

python - '' and'逻辑运算符和 "&"按位运算符在Python的这种情况下有什么区别?

python - Django Rest 框架业务逻辑

python - 匹配空字符串的正则表达式?