所需jar包:https://download.csdn.net/download/weixin_42114911/10628916
/**
* 发送短信 Util
*
* @author wd
*/
public class MoblieMessageUtil {
// 短信API产品名称
private final static String PRODUCT = "Dysmsapi";
// 短信API产品域名
private final static String DOMAIN = "dysmsapi.aliyuncs.com";
/**
* 生成随机的6位数,短信验证码
*
* @return
*/
public static String getMsgCode() {
int n = 6;
StringBuilder code = new StringBuilder();
Random ran = new Random();
for (int i = 0; i < n; i++) {
code.append(Integer.valueOf(ran.nextInt(10)).toString());
}
return code.toString();
}
/**
* 发送注册验证码
*
* @throws ClientException
*/
public static String sendMessagesVerifyCode(String phone, String code) throws ClientException {
String msg = "";
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
final String accessKeyId = ConstantUtil.SMS_ACCESS_KEY_ID;// 你的accessKeyId
final String accessKeySecret = ConstantUtil.SMS_ACCESS_KEY_SECRET;// 你的accessKeySecret
// 初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", MoblieMessageUtil.PRODUCT, MoblieMessageUtil.DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象
SendSmsRequest request = new SendSmsRequest();
// 使用post提交
request.setMethod(MethodType.POST);
// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”
request.setPhoneNumbers(phone);
// 必填:短信签名-可在短信控制台中找到
request.setSignName(ConstantUtil.SMS_SIGN_NAME);
// 必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.setTemplateCode(ConstantUtil.SMS_TEMPLATE_CODE_REGISTER);
request.setTemplateParam("{\"code\":\"" + code + "\"}");
// 请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
System.out.println(sendSmsResponse.getCode());
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
// 请求成功
msg = "短信发送成功";
} else {
msg = "短信发送失败";
}
return msg;
}
/**
* 发送找回密码短信
*
* @throws ClientException
*/
public static String sendMessagesUserPwd(String phone, String code) throws ClientException {
String msg = "";
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
final String accessKeyId = ConstantUtil.SMS_ACCESS_KEY_ID;// 你的accessKeyId
final String accessKeySecret = ConstantUtil.SMS_ACCESS_KEY_SECRET;// 你的accessKeySecret
// 初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", MoblieMessageUtil.PRODUCT, MoblieMessageUtil.DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象
SendSmsRequest request = new SendSmsRequest();
// 使用post提交
request.setMethod(MethodType.POST);
// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”
request.setPhoneNumbers(phone);
// 短信签名
request.setSignName(ConstantUtil.SMS_SIGN_NAME);
// 短信模板 忘记密码
request.setTemplateCode(ConstantUtil.SMS_TEMPLATE_CODE_FORGET_PASSWORD);
request.setTemplateParam("{\"code\":\"" + code + "\"}");
// 请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
System.out.println(sendSmsResponse.getCode());
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
// 请求成功
msg = "短信发送成功";
} else {
msg = "短信发送失败";
}
return msg;
}
}