python3利用腾讯云发送短信
如何发送短信
首先,注册一个腾讯云的账号,然后点击这里
- 注册成功后,腾讯云会自动生成一个短信应用,如果没有默认应用,需要新建一下
- 记录一下应用的 appid 以及 appkey 一会要用到

配置短信的签名,用来限制短信接口的权限,防止被恶意调用
然后配置模板
好了,进入正题,下面安装腾讯云短信的sdk
pip install qcloudsms_py
按照官网文档,准备必要的参数
# 短信应用 SDK AppID appid = 1400009099 # SDK AppID 以1400开头 # 短信应用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 需要发送短信的手机号码 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,需要在短信控制台中申请 template_id = 7839 # NOTE: 这里的模板 ID`7839` 只是示例,真实的模板 ID 需要在短信控制台中申请 # 签名 sms_sign = "腾讯云" # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台中申请
指定模板ID单发短信
from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError ssender = SmsSingleSender(appid, appkey) params = ["5678"] # 当模板没有参数时,`params = []`可以发送随机数,用来做短信验证码,如果指定为["5678",'5'],则过期时间为5分钟 try: result = ssender.send_with_param(86, phone_numbers[0], template_id, params, sign=sms_sign, extend="", ext="") except HTTPError as e: print(e) except Exception as e: print(e) print(result)
如果要群发短信,
phone_numbers
不取0值,发送全部
点击发送短信验证码
视图定义,获取手机号,这里,我是把上面的脚本封装成函数phone_s
了,两个参数,分别为手机号和随机数验证码
class phoneView(APIView):
def post(self,request):
phone = request.POST.get('phone')
# 随机数,用来做验证码
uuid = random.randint(1000,9999)
# 调用发送短信的接口,传入手机号和随机数验证码
pwg = phone_s(phone,uuid)
if pwg:
# 连接redis
redis_client = get_redis_connection('phone')
redis_phone = redis_client.get(phone)
# 防止频繁发送,如果redis中有,就不必再发
if redis_phone:
return Response({'code': 1003, 'msg': '频繁发送'})
# 存入redis,邮箱为键,uuid为值
redis_client = get_redis_connection('phone') # 获取redis客户端
redis_client.setex(phone, 60 * 5, uuid)
return Response({'code':1000,'msg':'发送成功'})
return Response({'code':1004,'msg':'发送失败'})
至于验证,只需要从redis中取出验证码来比对即可
邮箱验证码
发送邮箱验证码,我们使用的是QQ邮箱,打开QQ邮箱,打开设置,在里面找到
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
打开POP3/SMTP服务
获取到授权码之后,我们就可以直接可以开始
#定义参数
my_mail = "你申请授权的邮箱"
#授权码
my_pass = "授权码"
#定义发送邮件的方法
def mail(subject,content,mailaddr):
#声明邮件对象
msg = MIMEText(content,'plain','utf-8')
#设置发送方对象
msg['From'] = formataddr(['在线教育平台',my_mail])
#设置收件方对象
msg['To'] = formataddr(['尊敬的客户',mailaddr])
#设置标题
msg['Subject'] = subject
#设置smtp服务器
server = smtplib.SMTP_SSL("smtp.qq.com",465)
#登录邮箱
server.login(my_mail,my_pass)
#发送邮件
server.sendmail(my_mail,[mailaddr],msg.as_string())
#关闭smtp链接
server.quit()
然后定义视图
class Go_emailView(APIView):
def post(self,request):
# 验证邮箱有效性
email = request.POST.get('email',None)
try:
re.match(r'[a-zA-Z0-9]{0,19{@(qq|163|126)\.(com|cn|net)$', email)
except Exception as e:
return Response({'code': 1002, 'msg': '电子邮箱不正确'})
# 查询redis中是否有这个数据,如果有,则不需要再次发送
# 验证邮箱验证码
redis_client = get_redis_connection('email')
# 获取redis中的库
redis_email = redis_client.get(email)
if redis_email:
return Response({'code':1003,'msg':'频繁发送'})
uuid = random.randint(0,9999)
try:
# 调用发送邮件的函数
mail('龙潭技术博客验证', '您的验证码是{{,有限期为2分钟'.format(uuid), email)
# 存入redis,邮箱为键,uuid为值
redis_client = get_redis_connection('email') # 获取redis客户端
redis_client.setex(email, 60 * 2, uuid)
return Response({'code':1000,'msg':'发送成功'})
except Exception as e:
print(e)
return Response({'code':1001,'msg':'发送失败'})
- Post link: https://www.godhearing.cn/yan-zheng-ma-xi-lie-you-xiang-duan-xin/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.