python - Django 可以发送“重置密码”邮件但不能使用“send_mail”
问题描述
当人们注册我的网页时,我想发送一封“问候”邮件。
我可以使用内置发送“重置密码”电子邮件,auth_views.PasswordResetView
但是当我尝试使用时,django.core.mail.send_mail
我得到了一个Username and Password not accepted.
我的settings.py
.
.
#Email config
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = "My Name <no-reply@my_site.com>"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_PASSWORD = app_cred
EMAIL_HOST_USER = app_email
和views.py
def register(request):
if request.method=="POST": #post request
form = UserRegisterForm(request.POST)
agree_form = AgreeForm(request.POST)
if form.is_valid() and agree_form.is_valid():
user = form.save(commit=False)
user.email = form.cleaned_data["email"]
user.save()
send_mail(subject = "Welcome to my-site.com",
message = "Welcome!",
from_email = None,
recipient_list = [user.email])
return redirect("login")
else:
form = UserRegisterForm()
agree_form = AgreeForm()
return render(request,"users/register.html",context= {"form":form,"agree_form":agree_form})
据我了解,Django 使用设置中指定的凭据,所以我想知道为什么我可以发送密码重置邮件但不能使用send_mail
使用相同凭据的方法?
解决方案
我是SO新手,我没有评论这个的声誉,否则我会,但我认为这是因为如果没有为'send_mail'中的'from_email'参数提供值,那么它默认为'DEFAULT_FROM_EMAIL ' 设置中提供的值,在您的情况下为“我的姓名 <no-reply@my_site.com>”。如果是这种情况,那么我的假设是它正在尝试使用该电子邮件(我的姓名 <no-reply@my_site.com>)在 Gmail 服务器上对您进行身份验证,无论您的密码是什么。(https://docs.djangoproject.com/en/3.2/topics/email/)。
一个快速检查的方法是将'send_email'中的'from_email'值从None更改为'EMAIL_HOST_USER',
send_mail(subject = "Welcome to my-site.com",
message = "Welcome!",
from_email = settings.EMAIL_HOST_USER,
recipient_list = [user.email])
return redirect("login")
或将您的“DEFAULT_FROM_EMAIL”值更改为与“EMAIL_HOST_USER”值相同。
DEFAULT_FROM_EMAIL = app_email
EMAIL_HOST_USER = app_email
我不太确定您的后端在发送电子邮件方面是什么样的,但我希望这会有所帮助!
推荐阅读
- python - 将表格转换为 JSON
- rust - 如何确定我是否有一个独特的 Arc 被丢弃?
- c++ - 使用 Poco ProcessHandle 发送命令并获取结果出现异常
- linux - 致命错误:aux.h 没有这样的文件或目录(Ubuntu)
- python - 如何解决selenium firefox浏览器被远程控制?
- c - 删除链表中最后一次出现的元素的程序出错
- python - Cartopy投影比例不一致
- c++ - C++ 错误:无法使用“char [1024]”类型的左值初始化“char”类型的数组元素
- java - 通过 'sessionFactory' 不满足的依赖关系;没有可用的“org.hibernate.SessionFactory”类型的合格 bean
- html - 使用纯 CSS 切换动画元素(复选框 hack)