【干货】如何使用python发送一条短信[附完整demo]

5 篇文章 1 订阅
3 篇文章 0 订阅

让您的python会发短信

首先我们知道,我们不可能完全凭借python直接向手机发送短信的,就算有牛人做出了这样的技术,那么运营商也是绝对不会允许这样的情况发生的
在这里插入图片描述
可以用于用户注册验证/手机认证/紧急通知等场景
好了,言归正传,我们该怎么做才能让自己的python向指定手机发送短信呢?

短信API平台

首先,我们需要选择一个提供相关API服务的平台,这里以短信宝为例,其官网地址为: 短信宝官网…(不是,这次真的不打广告了,这个平台速度挺快的)
进入官网后,进行常规的注册/登陆在这里插入图片描述

方法-步骤

当你注册/登陆后,就是关键的一步了
在这里插入图片描述
因为。。。。。。这要看你是否着急进行开发搭建,着急的请直接跳到"使用平台已提供的demo",不着急的可以继续看下面的文章

自己写代码(python 3.x下)-demo分析及实际应用

首先,自己写代码需要阅读开发文档以了解各接口的使用方式和返回的值代表的含义,此外,有一点非常重要!
那就是短信格式要求

1.测试短信时,也请发送正规内容短信,如验证码、订单通知等,千万不要发送无意义的内容:例如 测一下、您好。
正确范例:【万千购】您的验证码是1234,30秒内有效.若非本人操作请忽略此消息
2.短信内容中必须含短信签名格式为:【公司签名】 ,【】中间的文字可以是公司简称、网站简称、注册商标名称,3~10个字符,如 好乐迪,志邦橱柜。不能是无意义的签名,例如【测一下】【试试看】等。

这些规则基本是所有短信平台通用的,由运营商规定,必须遵守的。
下面,我们来到其开发文档页面,可以看到,关于短信接口的文章有”国内短信API”和“国际短信API”两个。
在这里插入图片描述
这里我们一般的业务只需要用到国内短信API即可,我们点击它就可以看到如何利用API向国内的手机号发送短信了。
根据文档我们看到,其主要功能接口地址是
http://api.smsbao.com/sms?u=USERNAME&p=PASSWORD&m=PHONE&c=CONTENT
这个就是它的接口了,而它的安全接口其实就是进行了SSL加密,使用了HTTPS协议,我们以http情况为例。
首先,我们需要确认我们要向接口传输什么数据
在这里插入图片描述
可以看到,这个接口在发送短信时需要向接口内传入4个参数,其中参数P较为特殊,是平台登录密码MD5后的值,这个值我们可以通过

hashlib.md5().update(str.encode("utf8"))

来得到一个MD5加密值,到这一步后事情就简单起来了,因为我们可以看到接口是支持GET请求的,所以我们最简单粗暴的办法就是直接拼接出一个URL地址,进行get请求即可完成一次发送,我们来试一下,首先我们导入需要的库,并且写出负责加密工作的代码,这里请求也可以使用requests

import urllib #发送请求
import hashlib #加密

def md5s(strs):
   m = hashlib.md5()
   m.update(strs.encode("utf8")) #进行加密
   return m.hexdigest()

然后我们需要拼接数据并发送出去,参照文档,我们可以这样写这段代码

 smsapi = "http://api.smsbao.com/"
        # 短信平台账号
        user = '用户名'
        # 短信平台密码
        password = md5s('您设置的密码')
        # 要发送的短信内容
        content = str(“这里需要注意格式,一点要加【】”)
        # 要发送短信的手机号码
        phone = str("111-------")
data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content}) #参数
send_url = smsapi + 'sms?' + data #拼接url
urllib.request.urlopen(send_url) #发送请求

代码里面已经对变量进行了详细注释。至此,您的脚本已经可以实现进行一次单线的请求了,也就是脚本仅确保发送任务执行完成了,不能确保发送成功了或者内容正确了,所以,我们需要接收平台反馈回来的参数,通过它们来判断短信发送的状态。
根据官方文档可以编写一个字典格式的状态码对照表出来

statusStr = {
        '0': '短信发送成功',
        '-1': '参数不全',
        '-2': '服务器不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
        '30': '密码错误',
        '40': '账号不存在',
        '41': '余额不足',
        '42': '账户已过期',
        '43': 'IP地址限制',
        '50': '内容含有敏感词',
        '51':'手机号码不正确'
        }

那么我们就需要接收平台反馈的参数,我们需要修改上面的发送请求部位的代码,然后将反馈值代入字典中查询对应状态情况,具体操作如下

 the_page = response.read().decode('utf-8') #the_page参数将会接收反馈的数据
 #这里用简单的校验方法
 try:
     print(statusStr[the_page])
except:
     print('短信发送出现未知错误')
     #log_text('短信发送出现未知错误%s' %the_page) 这里可以写您程序自己的日志记录代码

稍加改进,写入到类里面,并让它可以表达的更加具体,方便我们修改

def smsbao(phone,text):  #短信宝接口对接

        statusStr = {
        '0': '短信发送成功',
        '-1': '参数不全',
        '-2': '服务器不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
        '30': '密码错误',
        '40': '账号不存在',
        '41': '余额不足',
        '42': '账户已过期',
        '43': 'IP地址限制',
        '50': '内容含有敏感词',
        '51':'手机号码不正确'
        }
        smsapi = "http://api.smsbao.com/"
        # 短信平台账号
        user = '*****'
        # 短信平台密码
        password = md5s('*****')
        # 要发送的短信内容
        content = str(text)
        # 要发送短信的手机号码
        phone = str(phone)

        data = urllib.parse.urlencode({'u': user, 'p': password, 'm': phone, 'c': content})
        send_url = smsapi + 'sms?' + data
        response = urllib.request.urlopen(send_url)
        the_page = response.read().decode('utf-8')
        try:
            print(statusStr[the_page])
            return (statusStr[the_page])
        except:
            print('短信发送出现未知错误')
            log_text('短信发送出现未知错误%s' %the_page)
            return '未知错误'
#业务调用部分
duanx=smsbao(phone,'【火毅网络】该手机号正在申请实名认证,您的验证码为%s,如非本人操作请勿理会。' %yzm)#调用短信宝接口对接,也就是smsbao方法
if duanx != '短信发送成功': #判断是否为成功
    print('短信发送失败【%s】' %duanx)
    #这里可以写您在短信发送失败后如何提醒用户
else:
    file=open('y%s.txt' %ipd,'w')
    file.write('%s,%s,%s' %(yzm,phone,times))
    file.close()
    #这里可以写您的短信发送完毕后如何提醒用户

至此,您的脚本已经具备了较为完善的短信发送模块了,可以用于
用户注册验证/手机认证/紧急通知等场景

使用平台已提供的demo

斯,既然你跳下来了,那么,一个不介意我说一句话吧
在这里插入图片描述
选这个的嘛,其实你们已经可以脱离我们这种教程了,官方的文档中已经有可以调用的demo了,本文章仅分析了demo的原理和写法,并加以实际应用。
好啦,祝您好运~~

  • 14
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
使用Python模拟手机发送短信,你可以使用Twilio这个免费的网站来实现。首先,你需要在Twilio的官方网站进行注册。注册完成后,你会得到一个account_sid和auth_token,这两个信息会在程序中被用到。 接下来,你需要在你的Python代码中导入Twilio的库,并使用你的account_sid和auth_token来实例化一个Twilio的客户端对象。然后,你可以调用客户端对象的messages.create()方法来发送短信。在这个方法的参数中,你需要指定收件人的手机号码、发送者的Twilio号码以及短信的内容。 这是一个示例代码,用于模拟使用Python发送短信: ```python from twilio.rest import Client # 替换成你的account_sid和auth_token account_sid = "替换成你的ACCOUNT_SID" auth_token = "替换成你的auth_token" # 实例化Twilio客户端 client = Client(account_sid, auth_token) # 发送短信 message = client.messages.create( to="填写你注册时的手机号码", from_="替换成你的Twilio号码", body="这是一条测试短信" ) ``` 请注意,在上述代码中,你需要将"填写你注册时的手机号码"替换成你用于接收短信手机号码,将"替换成你的Twilio号码"替换成Twilio分配给你的号码。 这样,当你运行这段代码时,Twilio就会模拟发送一条短信到指定的手机号码中。 总结一下步骤: 1. 在Twilio官方网站注册并获取account_sid和auth_token。 2. 导入Twilio的库并实例化Twilio客户端对象,使用你的account_sid和auth_token。 3. 使用客户端对象的messages.create()方法发送短信,指定收件人的手机号码、发送者的Twilio号码以及短信的内容。 希望这个解答对你有帮助!如果还有其他问题,请随时提问。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无别052

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值