Args smsArgs = new Cfg("config.xml", false).getArgs("ismg")
smsArgs.set("source-addr", "XXXX")
smsArgs.set("shared-secret", "XXXX")
smsArgs.set("port", 7890)
smsArgs.set("host", "XXXXXX")
smsArgs.set("heartbeat-interval", 10)
smsArgs.set("reconnect-interval", 30)
smsArgs.set("heartbeat-noresponseout", 5)
smsArgs.set("transaction-timeout", 20)
smsArgs.set("version", 1)
smsArgs.set("debug", false)
CMPPSMProxy cmppSmProxy = new CMPPSMProxy(smsArgs)
String[] rcvMobile = phone.split(",")
CMPPSubmitMessage submitMsg = new CMPPSubmitMessage(1, // 相同Msg_id消息的总条数
1, // 相同Msg_id的消息序号
1, // 需要状态报告
1, // 信息类别
"websms", // 业务类型,应与Infox对应
1, // 计费用户类型,0:对目的终端MSISDN计费,1:对源终端MSISDN计费,2:对SP计费,3:本字段无效
"", // 被计费用户的号码(因是对主叫计费,所以此段填写了空)
0, // GSM协议类型
0, // GSM协议类型
1, // 信息的CMPP格式类型: 0: ASCII格式, 1: UCS2格式
"websms", // 信息内容来源,对应于登录Infox的帐号
"02", // 资费类别,“短消息类型”为“发送”,对“计费用户号码”不计信息费,此类话单仅用于核减SP对称的信道费
"10", // 资费代码,以分为单位
new java.util.Date(System.currentTimeMillis() + 2 * 24 * 60
* 60 * 1000), // 存活有效期,当前时间+2天
new java.util.Date(System.currentTimeMillis()), // 定时发送时间(null:立即发送)
"8888", // 源终端MSISDN号码(为SP的服务代码或前缀, 为服务代码的长号码,
// 网关将该号码完整的填到SMPP协议相应的destination_address字段,
// 该号码最终在用户手机上显示为短消息的主叫号码) (没有可以为空)
rcvMobile, // 接收业务的MSISDN号码(数组)
content.getBytes("utf-8"), "")
CMPPSubmitRepMessage rep = (CMPPSubmitRepMessage) cmppSmProxy
.send(submitMsg)
if (rep != null) {
prlint(phone + ":发送结果smsDemo: " + rep.getResult()
+ ",rep.getSequenceId():" + rep.getSequenceId()
+ ",rep.getMsgId():" + rep.getMsgId()
+ ",rep.getCommandId():" + rep.getCommandId()
+ new Timestamp(System.currentTimeMillis()))
}
cmppSmProxy.close()
System.out.println("执行完毕smsDemo:" + rep)
}
1.通过移动或联通短信网关发送短信,这需要通信服务商给你开通短信端口,发送短信协议各个服务商都不一样,比如移动的是cmpp2,cmpp3等2.第二种是通过硬件设备发送短信,这个需要你有专门的硬件设备,比如一个上网卡或者一个手机模块,通过调用com遵从一些协议发送短信
单纯靠写代码是无法发短信的,至少要有一个WEBSERVICE接口或者硬件接口。
本人就是在中国移动做网信项目的,如果你是个人发送短信或彩信的话,需要使用短信猫,(北京中关村就可以买到,里面放上手机卡)。如果你是公司的话,你公司可以去移动申请mas机,然后走CMPP3.0协议进行发送,但是这样是需要移动开接口的,cmpp3.0是中国移动提供的,里面有标准的接口规范,你按照里面的规范编写代码就OK了