java实现短信通信的完整教程
作者:卖泡面的小男孩 发布时间:2023-03-23 23:03:40
前言
短信信息的发送目前已经是项目中必不可少的部分,我们怎么通过web页面来实现把信息推送到别人手机上呢?简单点,编码的方式简单点!看完本篇文章,以后要实现短信的发送都只需要知道发什么?发给谁?就OK了,代码如下,是不是很简单^_^
String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//接收人手机号
String message = "您好!";//短信内容
result = note.sendNote(Tel,message);//信息发送状态
要实现在页面或控制台输入一些信息再指定一个电话号码就能把信息发送给对方,这对B/S结构的项目来说可是头疼的,但我们能不能把要发送的信息和要发送的电话号码交给一个负责发送短信的服务器,由它来帮我们完成信息的发送呢?答案是肯定的,只是钱的问题…….(毕竟天下没有免费的午餐),明白了这一点,接下来就好办了,我们只要知道服务器在哪,以及怎么联系服务器不就搞定了。所幸的是Apache给我们提供了一个HttpClient 子类,用于帮助我们连接到发送短信的服务器,那发送短信的服务器在哪呢?网上有各种各样的短信服务平台,接下来我们以中国网建为例来讲解短信信息的发送。
首先,你需要注册一个账号,注册完成后系统会为你提供一个用户名和一个密钥(在修改短信密钥里找到)并且提供5条免费短信,对于测试来说足够了,我们需要的就是id和key这两个东西,接下来开始吧!
1、导入相关jar包
相关jar包:
jar包下载:短信通信
2、制作短信小工具
我们希望的是一劳永逸,做一个项目就要导包改各种参数是很费劲的,接下来我们用单例模式来为我们的项目提供信息修改吧,有信息变动我们只需要改配置文件就可以了,代码部分完全不用变。这样我们通过一个note.properties来放配置文件,一个ConfigNoteInfo.java调用配置文件参数的类,以及一个Note.java实现短信的发送的类就实现小工具的制作了,接下来依次教大家配置这三个文件。
第一步,我们在项目里新建一个叫note.properties的文件,里面的参数就两个(这里是放在src根目录下里)。
id=xxx(xxx是你注册的用户名)
key=********(注册成功后平台提供的短信密钥)
第二步,ConfigNoteInfo.java获取配置文件中的id和key
public class ConfigNoteInfo {
private static ConfigNoteInfo configNoteInfo;
private static Properties properties;
private ConfigNoteInfo(){
//note.properties是你在根目录新建的配置文件
String configFile="note.properties";
properties=new Properties();
InputStream in=ConfigNoteInfo.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigNoteInfo getInstance(){
if(configNoteInfo==null){
configNoteInfo = new ConfigNoteInfo();
}
return configNoteInfo;
}
public String getString(String key){
return properties.getProperty(key);
}
}
第三步,Note.java类实现短信信息的发送,基于OOP思想,我们还是把短信发送单独提出来成为一个方法,让以后的工作中只需要传一个手机号和一个消息字符串就能实现短信的发送。(如果是多个手机号可传手机号的数组或List集合)
package cn.hs.tools;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
/***
* @author HeShuang
*@Create_date:2017-5-4
*/
public class Note {
//短信接口,传参(手机号,短信内容)即可发送短信。
public String sendNode(String Tel,String message) throws HttpException, IOException{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://utf8.sms.webchinese.cn");
post.addRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=UTF-8");// 在头文件中设置转码,这里为UTF-8
NameValuePair[] data = {
new NameValuePair("Uid", ConfigNoteInfo.getInstance().getString("id")), // 注册的用户名,我们通过单例模式从配置文件id中读取用户名。
new NameValuePair("Key",ConfigNoteInfo.getInstance().getString("key")), // 注册成功后,登录网站后得到的密钥 ,同样从配置文件读取。
new NameValuePair("smsMob", Tel), // 传递过来的手机号码
new NameValuePair("smsText", message) // 传递过来的短信内容
};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int flag = post.getStatusCode(); //返回状态,参照API
System.out.println("statusCode:" + flag);
for (Header h : headers) {
System.out.println("---" + h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes(
"UTF-8"));
System.out.println(result);
String info="";
if(Integer.parseInt(result.trim())>0){
info="发送成功!";
}
switch (result.trim()) {
case "-1":
info="用户账号不存在!";
break;
case "-2":
info="接口密钥不正确";
break;
case "-3":
info="尊敬的用户, * * ,请您先把短信费用缴了!";
break;
case "-4":
info="手机号格式不正确!";
break;
case "-6":
info="IP存在限制!";
break;
case "-11":
info="该用户已被禁用!";
break;
case "-14":
info="短信内容存在非法字符!";
break;
default:
break;
}
return info;
}
}
第四步,在其他地方调用我们的工具类实现短信的发送。
String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//要发送的手机号
String message = "您好!";//要发送的短信信息
result = note.sendNote();//获取信息发送状态
就此,java实现短信信息的发送功能就完成了,并且我们还把它做成了一个小工具类,信息有变更时,只需要改配置文件就行了,一次编写,处处复制。


猜你喜欢
- 定义广播 * 的Action:private static final String TAG ="SmsService"
- 遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。它能解决很多问题,
- 该篇文章是说明在Android手机或平板电脑中如何实现截取当前屏幕的功能,并把截取的屏幕保存到SDCard中的某个目录文件夹下面。实现的代码
- Android Studio打包.so库到apk中实例详解由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个
- 在JDK的Collection中我们时常会看到类似于这样的话:例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说
- 前言在机器学习中,卷积神经网络是一种深度前馈人工神经网络,已成功地应用于图像识别。目前,很多的车牌识号识别,人脸识别等都采用卷积神经网络,可
- 组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系。个人理解:组合模式就
- 一:串口通信简介前段时间因为工作需要研究了一下android的串口通信,网上有很多讲串口通信的文章,我在做的时候也参考了很多文章,现在就将我
- 一、可空类型修饰符(?)C#2.0里面实现了Nullable数据类型//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将
- 本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下1. 获得Calendar实例:Calendar c = Cale
- 本文实例为大家分享了Android实现掷骰子效果的具体代码,供大家参考,具体内容如下利用handler接受子线程的消息完成骰子点数的不断更替
- 把SpringBoot项目打包成Docker镜像有两种方案:全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地
- 本文实例讲述了Android获取手机屏幕大小的方法。分享给大家供大家参考,具体如下:这里主要用了三个对象TextView ,Button ,
- 背景环境已学习java基础,html,css,js,jquery,bootstrap,layui,maven,servlet和jsp,刚进入
- 一、简介1、DES 简介DES 全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,197
- 概述中国特色社会主义乱码问题是我们经常会碰到的问题,解决的办法有很多,本文分别介绍了GET方式和POST方式中文乱码解决方案中一劳永逸的办法
- spring boot实现自动输出word文档功能本文用到Apache POI组件组件依赖在pom.xml文件中添加<dependen
- 升级年初了,我们打算升级下apg,这样之后就拥抱下jetpack compose了!!想用comopse有两个必选项agp7.0和kotli
- 还是我们自定View的那几个步骤:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性[ 3、重写onMesure ]4、
- 本文实例为大家分享了Android实现歌词滚动效果的具体代码,供大家参考,具体内容如下自定义TextViewpublic class Ver