短信猫是一种可以通过串口通信来操作发送短信的设备, 在python中, 要想通过COM通信, 需要使用serial包。

通过使用serial向短信猫发送AT指令的方式来操作短信猫,网上有不少python来操作短信猫的例子,能找到的主要有两种代码:

1, 使用控件发送短信, 代码一般看起来是这样的

#! /usr/bin/env python
#coding=gbk
import sys
import win32com.client
ocxname='ShouYan_SmsGate61.Smsgate'
axocx=win32com.client.Dispatch(ocxname)
axocx.CommPort=8#设置COM端口号
axocx.SmsService='+8613800100500'#设置短信服务号码
axocx.Settings='9600,n,8,1'#设置com端口速度
axocx.sn='loyin'
c=axocx.Connect(1)#连接短信猫或手机
print '连接情况',axocx.Link()
axocx.SendSms('python确实是很好的','15101021000',0)#发送短信


这里使用了win32com来调用控件,直接看这段代码基本上一点用没有, 因为这个控件不知道从哪弄


2. 第二种是使用AT指令PDU模式发送, 过程比较复杂, 需要经过多次编码

首先是发送短信的手机号和接受的手机号, 前面加86, 最后一位补一个F, 然后奇偶位互换,随后在两个号码之间增加一些固定的间隔符,最后加上要发送的信息和结束标志,这些拼成一个字符串, 然后使用AT+CMGS发送,试了很多次都不成功,网上的代码多半不靠谱啊。




其实用text模式发送过程很简单, 交互环境下几行代码搞定:

>>>import serial
>>>ser = serial.Serial(port='COM1', baudrate=9600)
>>>ser.write("AT+CMGF=1\r")
>>>ser.write("AT+CMGS=18600000000\r")
>>>ser.write("1234" + "\x1A")


注:这里是发送验证码,所以选择文本发送,但是如果需要发送中文还是需要pdu模式, 那么用pdu怎么发送呢,首先要生成一个手机号+短信的字符串

1, 手机号 加86, 尾部加F, 然后奇偶换位   dis_phone

2,短信 转unicode 字符, 长度 /2 ->msg, msg_len (最后一步字符串中的msg_len需要转为16进制字符串)

3,发送AT+CMGF=0 , 切换到pdu模式

4,发送AT+CMGS=15+  LEN

5,生成msg字符串信息并发送    '0011000D91{phone}000801{msg_len}{msg}\x1A'.format(phone=dis_phone, msg_len=msg_len, msg=msg)


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐