java 如何发送短信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何发送短信相关的知识,希望对你有一定的参考价值。

import java.net.URLEncoder;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.io.*;

class http_post

public String send_sms(String user_id, String password, String mobile_phone,
String msg, String send_date, String subcode)
String ret_str = "";

try
// Construct data
String data = "user_id=" + user_id + "&password=" + password +
"&mobile_phone=" + mobile_phone +
"&msg=" + URLEncoder.encode(msg, "GBK") + "&send_date=" + send_date +
"&subcode=" + subcode;
// Send data
URL url = new URL("http://bms.hichina.com/sms_gateway/sms_api");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.
getInputStream()));
String line;
while ( (line = rd.readLine()) != null)
ret_str += line;

wr.close();
rd.close();

catch (Exception e)
System.out.println(e.toString());


return ret_str;


public static void main(String[] args) throws IOException

http_post http= new http_post();
String ret=http.send_sms("4003","xxxxxxx","13900000000","fromjava中国万岁","","4003");
System.out.println(ret);



对java发短信是一片空白,这个是网上找的一个代码,里面的第1,2和最后一个参数不明白什么意思,大概是我在信息中心的id和登陆密码?是这个意思吗?如果我想测试我该如何注册这个id和密码,各个地区的信息中心还不一样吧?北京的应该去那里注册?请高手帮我调通这个程序,谢谢
用户名,即企业代码: $user_id
密码:$password
接收短信的手机号(如果是多个手机号,用逗号分开,最多100个):$mobile_phone
要发送的短信内容:$msg
定时发送时间(格式为:年月日时分秒“040524165823”,如果即时发送置为空):$send_date
子特服号(与企业代码相同):$subCode

这段代码本身只是利用java访问了一个url:("http://bms.hichina.com/sms_gateway/sms_api,后面带了一堆的参数:String data = "user_id=" + user_id + "&password=" + password +
"&mobile_phone=" + mobile_phone +
"&msg=" + URLEncoder.encode(msg, "GBK") + "&send_date=" + send_date +
"&subcode=" + subcode;
,仅此而已,至于具体要怎么发,那就要看http://bms.hichina.com/sms_gateway/sms_api这个URL提供放的后台是如何定义参数的含义了。
参考技术A   JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵(3)使用中国网建提供的SMS短信平台
  JAVA调用

  import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
  public class SendMsg_webchinese

public static void main(String[] args)throws Exception


HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn");
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data = new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全密码"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","短信内容");
post.setRequestBody(data);

client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)

System.out.println(h.toString());

String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result);

post.releaseConnection();


  
  jar包下载
commons-logging-1.1.1.jar
commons-httpclient-3.1.jar
commons-codec-1.4.jar
参考技术B you should contact the SMS center (service provider) to get their API documentation to figure out the parameters and protocols they use. there must be some security measures of course.

ok, had another look at your code. it seems to me that your url parameters were NOT attached to the url to open. normally parameters should be send as query strings. you might wanna try the following before opening the url connection:

code
...
String url = "http://bms.hichina.com/sms_gateway/sms_api" + "?" + data; // data contains your params
...
// code to open url connection
code

another thing you might need to take care is that you might need to setDoInput() as well for the connection.
参考技术C java本身不可能发送短信。
不过有些厂商提供短信服务器发送短信,另外会提供java库或者通讯接口进行远程调用短信服务器。 java可以使用对方提供的库,或者按远程通讯来调用短信服务器,实现发送短信的功能。
参考技术D 以前是用短信猫。
现在不用,直接咨询运营商给你开通相应的服务。
然后直接开发可发送短信的接口。
有的运营商还有现成的接口提供,
你直接调用就可以发送短信了。

java如何实现发送短信验证码功能?

1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.io.IOException;import java.util.Map; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.SimpleHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, Map<String, String> params) //构造HttpClient的实例 HttpClient httpClient = new HttpClient(); //创建POST方法的实例 PostMethod postMethod = new PostMethod(url); //设置请求头信息 postMethod.setRequestHeader("Connection", "close"); //添加参数 for (Map.Entry<String, String> entry : params.entrySet()) postMethod.addParameter(entry.getKey(), entry.getValue()); //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收处理结果 String result = null; try //执行Http Post请求 httpClient.executeMethod(postMethod); //返回处理结果 result = postMethod.getResponseBodyAsString(); catch (HttpException e) // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); catch (IOException e) // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); finally //释放链接 postMethod.releaseConnection(); //关闭HttpClient实例 if (httpClient != null) ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; return result; /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, Map<String, String> params) //构造HttpClient实例 HttpClient client = new HttpClient(); //拼接参数 String paramStr = ""; for (String key : params.keySet()) paramStr = paramStr + "&" + key + "=" + params.get(key); paramStr = paramStr.substring(1); //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回结果 String result = null; try //执行HTTP GET方法请求 client.executeMethod(method); //返回处理结果 result = method.getResponseBodyAsString(); catch (HttpException e) // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); catch (IOException e) // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); finally //释放链接 method.releaseConnection(); //关闭HttpClient实例 if (client != null) ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; return result;

2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.net.URLEncoder;import java.util.HashMap;import java.util.Map; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content) //短信接口URL提交地址 String url = "短信接口URL提交地址"; Map<String, String> params = new HashMap<String, String>(); params.put("zh", "用户账号"); params.put("mm", "用户密码"); params.put("dxlbid", "短信类别编号"); params.put("extno", "扩展编号"); //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones); //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode() //验证码 String vcode = ""; for (int i = 0; i < 6; i++) vcode = vcode + (int)(Math.random() * 9); return vcode; /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) // System.out.println(SendMsgUtil.createRandomVcode());// System.out.println("&ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询XXX-XXX-XXXX【XXX中心】"));

然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来操作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。
参考技术A 你用JAVA开放的平台需要有短信接口,和短信群发平台公司对接短信实现触发自动下发验证码短信的功能,开户对接好,准备好足够短信条数就可以了,正规短信群发平台都会提供免费的对接文档给你对接,你做技术一看就明白的

以上是关于java 如何发送短信的主要内容,如果未能解决你的问题,请参考以下文章

如何用Java实现短信自动发送功能

发送短信——java

delphi to java,soap delphi,短信发送

发送短信验证码和邮箱验证码—Java实现

java实现发送短信验证功能

java发送手机短信