django 发送qq邮箱具体步骤,以及遇到的坑

主要的坑在于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, )

---------------------------------------------------------------------有坑才有成长----------------------------------------------------------------------------------

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值