java实现免费短信功能

Java实现免费短信功能需要使用到第三方短信服务商的API接口。常用的短信服务商有阿里云、腾讯云、云片等。这里以阿里云短信服务为例,介绍Java实现免费短信功能的步骤:

  1. 在阿里云官网注册账号并开通短信服务。登录阿里云控制台,进入“短信服务”页面,按照提示完成账号注册、实名认证和开通短信服务的操作。
  2. 创建AccessKey。在阿里云控制台中,进入“AccessKey管理”页面,创建AccessKey用于API访问。
  3. 在Java项目中添加阿里云短信SDK的Maven依赖。在pom.xml文件中添加以下代码:
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.0.0</version>
</dependency>
  1. 编写Java代码实现发送短信功能。以下是一个示例代码:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sms.model.v20170525.SendSmsRequest;
import com.aliyuncs.sms.model.v20170525.SendSmsResponse;
public class SmsUtil {
    // 阿里云短信API的密钥ID和密钥Secret
    private static final String ACCESS_KEY_ID = "your_access_key_id";
    private static final String ACCESS_KEY_SECRET = "your_access_key_secret";
    // 短信API的产品名称(短信产品名固定,无需修改)
    private static final String PRODUCT = "Dysmsapi";
    // 短信API的产品域名(接口地址固定,无需修改)
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    // 发送短信
    public static boolean sendSms(String phoneNumber, String signName, String templateCode, String templateParam) {
        // 设置超时时间-可自行调整
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        // 初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        try {
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        IAcsClient acsClient = new DefaultAcsClient(profile);
        // 组装请求对象
        SendSmsRequest request = new SendSmsRequest();
        // 必填:待发送手机号
        request.setPhoneNumbers(phoneNumber);
        // 必填:短信签名-可在短信控制台中找到
        request.setSignName(signName);
        // 必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(templateCode);
        // 可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为{"code":"123456"}
        request.setTemplateParam(templateParam);
        // 发送短信
        try {
            SendSmsResponse response = acsClient.getAcsResponse(request);
            if ("OK".equals(response.getCode())) {
                return true;
            } else {
                System.out.println("短信发送失败,错误码:" + response.getCode() + ",错误信息:" + response.getMessage());
                return false;
            }
        } catch (ServerException e) {
            e.printStackTrace();
            return false;
        } catch (ClientException e) {
            e.printStackTrace();
            return false;
        }
    }
}

其中,需要替换的参数包括:

  • ACCESS_KEY_ID:阿里云短信API的密钥ID。
  • ACCESS_KEY_SECRET:阿里云短信API的密钥Secret。
  • phoneNumber:接收短信的手机号码。
  • signName:短信签名,在阿里云短信控制台中创建。
  • templateCode:短信模板,在阿里云短信控制台中创建。
  • templateParam:短信模板中的变量替换JSON串。
  1. 在Java代码中调用sendSms方法发送短信。以下是一个示例代码:
public static void main(String[] args) {
    String phoneNumber = "手机号码";
    String signName = "短信签名";
    String templateCode = "短信模板代码";
    String templateParam = "{\"code\":\"123456\"}"; // 短信模板中的变量替换JSON串
    boolean result = SmsUtil.sendSms(phoneNumber, signName, templateCode, templateParam);
    if (result) {
        System.out.println("短信发送成功");
    } else {
        System.out.println("短信发送失败");
    }
}

注意:发送短信需要消耗短信API的资源,建议在调用sendSms方法前进行短信验证码的有效性验证,避免资源浪费。