简单介绍使用python发送短信的方式

简单介绍使用python发送短信的方式

前言

与电子邮件相比较,短信更直接可靠,生活当中接收各种的验证码,密码找回,取快递的验证码信息,这些生活场景都会用到程序到短信的应用。这篇文章笔者简单介绍了一下使用python发送短信的方式以及在文末贴上了笔者的应用案例。如有不妥之处还望不吝赐言。

使用模块——用Twiio发送短信

Twilio是一个免费的SMS网关服务,在官网注册后可以使用程序向登记过的电话号码发送短信。但为了安全方面的因素,仅支持对注册电话号码发送短信,也就是说,这个方式不试用于网站面向网站用户。Twilio提供试用账户包含一个电话号码,将作为短信的发送者。而在使用该模块发送短信时,需要三个信息,就是账户的SID和用户AUTH以及twilio电话号码。登录Twilio后,可以在页面中找到这些信息。

使用前需要安装twilio模块。

pip install twilio

使用Twilio发送短信大概非为以下三个步骤:

  • 1.在官网注册登记
  • 2.记录下accountSID,authToken,twilio电话号码
  • 3.调用Client发送短信

由于twilio模块的设计方式,导入它时需要试用twilio.rest。调用模块发送短信的代码也相当简单,只需调用模块的Client模块,设置好accountSID,authToken即可,但需要注意的是,短信号码需要加上国际区号,而且的python3和python2在这里有所不同。

from twilio.rest import Client

accountSID='youraccounSID'
authToken='yourauthToken'
myNumber='+8618888888888'
twilioNumber='+15555555555'

def textmyself(message):
    twilioCli = Client(accountSID,authToken)
    twilioCli.api.account.messages.create(body=message,from_=twilioNumber,to=myNumber)//python2
    twilioCli.messages.create(body=message,from_=twilioNumber,to=myNumber)//python3

参数意义:

body :短信消息内容

from_:twilio号码

to:注册号码

使用API——阿里云短信服务

前面所提到的twilio模块不适用于网站面向用户体的方式,但网站面向用户体发送短信是比较重要的。使用阿里云短信服务可以满足常见的应用场景的需求,比如用户的密码找回,短信验证码这些通常网站都需要的服务。而事实上,比较多的网站也是用阿里云的短信服务来支撑短信业务的。所以使用阿里云的短信服务可以完全满足个人使用。同时它弥补了twilio不能发送短信到陌生号码的短板,当然阿里的安全是做的相当好的,所以想给比人弄短信轰炸还是省省吧。阿里云短信服务是一项收费的服务,不过价格对于企业或则说对于个人开发者来说都是可以接受的,价格表在这里

1.开始使用:

相比较twilio所提供的短信发送服务来说,阿里云短信服务较为复杂。下面将简单介绍一下如何使用阿里云短信服务发送短信。

首先登录阿里云,在全部导航>产品>云通信>短信服务找到短信服务进入口,进入后需先开通该服务,然后才可以管理短信服务。



2.发送短信必须的条件:

  • 1.短信签名
  • 2.短信模板
  • 3.用户key

首先需要设置短信签名和短信模板,短信签名和短信模板都需要认证,一般几十分钟即可认证完毕。新建签名和模板比较容易,阿里云已经给出了模板,按照自己所需填写完毕即可。

然后到管理控制台记录下AccessKey和AccessKeySercet,用于填写到后面的程序中。准备好这些信息后,就可以按需调用接口了,接口的调用阿里云有比较完善的文档和程序注释,按照官方的文档和注释操作即可。笔者做了一个简单的应用实例,贴在这里。这个实例的作用是记录特定的天数,查询当地的天气情况,然后发送到用户电话号码。



做好以上的事情以后,调用短信服务的API(在短信服务>短信服务概括底部),可按需求选择不同的API接口,这里就选择“短信发送API python”。点进去是详细的文档说明,这里有API使用的详细介绍,这里不做赘述。


3.API使用:

这里需要注意的是,API调用传递变量的时候,需要把我们预先在短信模板上设置的变量赋值,然后转化为JSON格式,传递到调用的相应函数中,否则短信内容就是显示相应的变量名,而没有实际的值。

值的转换案例:

#设置天数
day_timedelta =datetime.datetime.now()- datetime.datetime(2016,8,25,0,0,0)
day=day_timedelta.days

#设置天气
url ='https://free-api.heweather.com/v5/forecast?city=%s&key=%s' % ('yourcity','yourkey')
response = requests.get(url)
response.raise_for_status()
weatherDate = json.loads(response.text,encoding='utf-8')
w = weatherDate["HeWeather5"]
weather=w[0]['daily_forecast'][0]['cond']['txt_d']

#转换成python字典格式
data = {
    'name' : 'someone',
    'oday' : day,
    'weather' : weather
}

#转换成JSON格式
params = json.dumps(data)
print send_sms(__business_id, "180000000", "短信签名", "SMS_12365e", params)

做好这些事情后就可以发送短信了,写好触发事件就可以收到程序发来的短信了,想想生活当中的实例,这一项功能还是比较有意思的。

相关链接:

短信服务

API

阿里云短信服务使用案例

Twilio使用案例

发布于 2017-08-30