主要的坑在于setting,以及发送的send_mail中的发送目标邮件必须是list。
@setting配置:
这是个人邮箱方法:
下面这个可以开,也可以不开,都是成功的。
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
#代理以及端口必须有
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 25
#起初是465,但是实际上是不行的。必须用上面的25才能成功
# EMAIL_PORT = 465
EMAIL_HOST_USER ='your_send_emial@qq.com'
#本来填的自己的账号密码,但是不行的.
# EMAIL_HOST_PASSWORD =os.environ['PASSWORDD']
#账号的密码必须是授权码,忘了的可以在qq邮箱里面设置,把已关闭 | 开启
IMAP/SMTP服务 (重新开启,发短信,就好了
EMAIL_HOST_PASSWORD = your
#这里的是前缀,也就是头
EMAIL_SUBJECT_PREFIX = u'[Sercheif]'
#后面这个必须为False否则也是发不成功的
# EMIAL_USE_TLS = True
EMIAL_USE_TLS = False
#有这个就会显示是你的邮箱
EMAIL_FROM ='your_send_email@qq.com'
如果这里配置不对,django是不会报错的,但是就是发送不成功。
2 企业邮箱:
#email_setting
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.exmail.qq.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'your_emial@compay.com'
EMAIL_HOST_PASSWORD = 'your_emial_password'
EMAIL_USE_SSL = False
#来源的Email必须和上面的Email是一致的。
EMAIL_FROM ='from_emial'
刚开始一直没反应。
@send_email.py的内容
import random
import string
from django.core.mail import send_mail
from app01.models import EmailVerify
from untitled.settings import EMAIL_FROM
def random_str(randomlenth=8):
str_all = string.ascii_letters+string.digits
send_str = random.sample(str_all, randomlenth)
send_str= "".join(send_str)
return send_str
def send_register_email(email, send_type = "register"):
# send_type = "register"
print(1111)
email_record = EmailVerify()
print(2222)
code =random_str()
print(code)
email_record.code = code
email_record.email =email
email_record.send_type = send_type
email_record.save()
email_title = ""
email_body = ""
print(2222)
# if send_type == "register":
if 1 :
email_title = '注册激活链接'
email_body = f"激活码:{code},\n请点击下面激活你的账号:http://127.0.0.1:8000/active/"
print(333)
send_status = send_mail(email_title, email_body, EMAIL_FROM, [email,'13095029550@163.com',], )
return send_status
最后的print(send_status) 为None,就知道是配置出问题了,中间的print数字是为了测试走到哪一步了。哪里出问题了
@views.py
#为了测试局部不需表单验证,如果是局部需要表单验证csrf_protect加这个
@csrf_exempt
def sendemail(request):
data = {'ret': 400, 'message': 'send_faild'}
if request.method == 'GET':
return render(request, 'send_mails.html')
else:
email = request.POST.get('email')
print(email)
str = send_register_email(email)
print(str)
if str:
data['ret'] = 200
data['message'] = 'send_success'
#为了类似前后端分离。
return JsonResponse(json.dumps(data), content_type='application/json', safe=False)
else:
return JsonResponse(json.dumps(data), content_type='application/json', safe=False)
send_mail其实后面的主要操作就是调用这个接口进行发送就好了
send_status = send_mail(email_title, email_body, EMAIL_FROM ,to_email, )
---------------------------------------------------------------------有坑才有成长----------------------------------------------------------------------------------