使用名商通短信接口发送短信
前段时间做了一个小项目。需要向指定的人的手机上发送相关信息短信。公司就注册了名商通帐户,名商通是针对企业内部及外部不同需求和应用方面,而专门定制开发的系统软件。它完全集成了企业用户所特有的短信应用功能。名商通官网:http://www.136000.com/ 。好像是5分钱一条短信。注册后会有用户名、密码、账户号信息。
项目的开发,使用的是纯java。用 SWING GUI 做界面。需要导入名商通提供的jar包。send.jar
整个项目的架构如下:
下面主要说短信发送这一块。
注册名商通后,需要充钱,同时会有用户名、密码、账户等信息。我是把这些信息存到了一个properties文件里面,里面是一些键值对。
然后,使用ScheduledExecutorService(也可以使用Timer,并发效率及控制不是太好)做了个定时任务,程序运行后,每5分钟,从数据库中读取一下需要发送的数据,向指定的人的手机号上,发送信息。
当然中间还有一些业务逻辑什么的,最终得到要发送的短信内容,以及要发送给哪些人的手机号码。
接着就是要调用发送短信的接口,进行发送短信了。
// 发送短信
public static boolean send(String str, String phones) {
// 存放调用返回的结果,判断成功与否应该分析这个字符串
String returnCode;
Sender sms = null;
if (senderMap.containsKey("sender")) {
sms = senderMap.get("sender");
if (null == sms) {
// 这里修改成你自己的用户名和密码
sms = new Sender(configMap.get("useName"), configMap.get("pwd"));
senderMap.put("sender", sms);
}
} else {
// 这里修改成你自己的用户名和密码
sms = new Sender(configMap.get("useName"), configMap.get("pwd"));
senderMap.put("sender", sms);
}
returnCode = sms.massSend(phones, str, "time", "", configMap.get("txtid") == null ? "" : configMap.get("txtid"));
LogPanel.jta.append(getSendTime() + "发出的短信:" + str + "\r\n");
logger.error(getSendTime() + "发出的短信:" + str);
String encode = null;
try {
encode = new String(returnCode.getBytes("GBK"), "GB2312");
if (encode.indexOf("发送成功") == -1) {
LogPanel.jta.append("发送失败!原因:用户名或密码不正确,或发送对象为空,可尝试重启\r\n");
LogPanel.jta.append("returnCode:" + encode);
logger.error("returnCode:" + encode);
logger.error("发送失败!原因:用户名或密码不正确,或发送对象为空,可尝试重启");
// 清空缓存
if (list2.size() > 0) {
logger.error("余额不足,还有异常信息未发送!");
}
return false;
}
System.out.println("returnCode:" + encode);
} catch (Exception e) {
logger.error("发短信异常");
return false;
}
return true;
}
最后,把该工程,打成可执行的.jar。使用.bat文件调用,进行运行。部署到服务器上,实时监控!
如想看最近都给哪些人的手机上发送了什么信息,可以查看界面如下:
还可以查看下,注册的服务账号,还剩下多少钱?界面如下:
结束!
还没有评论,来说两句吧...