Java发送短信:API库与工具概述
在现代Web应用中,发送短信仍然是一项常见需求:双因素认证、通知、营销推送。在Java中,有多个成熟的库和API封装可用于此目的。本文将介绍主要方法、流行库,并提供实用代码示例。
发送短信的基本方法
所有Java发送短信的方法可分为两类:
- 直接通过HTTP与提供商API交互 — 向短信网关的REST服务(如Twilio、Vonage/Nexmo、SMS-Центр等)发送HTTP请求(GET/POST)。
- 使用专用库 — 现成的Java封装,封装了HTTP调用、身份验证和响应处理。
Java流行库与API
我们来看三种最常见的方案。
1. Twilio Java SDK
Twilio是云通信领域的领导者之一。官方Java SDK(com.twilio.sdk:twilio)提供了简单且类型安全的接口。
安装(Maven):
<dependency> <groupId>com.twilio.sdk</groupId> <artifactId>twilio</artifactId> <version>9.14.0</version></dependency>发送短信示例:
import com.twilio.Twilio;import com.twilio.rest.api.v2010.account.Message;import com.twilio.type.PhoneNumber;
public class SmsSender { public static final String ACCOUNT_SID = "your_account_sid"; public static final String AUTH_TOKEN = "your_auth_token";
public static void main(String[] args) { Twilio.init(ACCOUNT_SID, AUTH_TOKEN); Message message = Message.creator( new PhoneNumber("+79261234567"), // 收件人号码 new PhoneNumber("+15551234567"), // 发件人号码(来自Twilio) "你好!这是来自Java的测试短信。" ).create(); System.out.println("消息SID: " + message.getSid()); }}2. Vonage(原Nexmo)Java客户端
Vonage提供了强大的Java SDK,用于发送短信和语音消息。支持同步和异步调用。
安装(Gradle):
implementation 'com.vonage:client:7.3.0'发送短信示例:
import com.vonage.client.VonageClient;import com.vonage.client.sms.MessageStatus;import com.vonage.client.sms.SmsSubmissionResponse;import com.vonage.client.sms.messages.TextMessage;
public class VonageSms { public static void main(String[] args) { VonageClient client = VonageClient.builder() .apiKey("your_api_key") .apiSecret("your_api_secret") .build();
TextMessage message = new TextMessage( "VonageAPI", // 发件人(最多11个字符) "79261234567", // 收件人 "通过Vonage从Java发送的测试" ); SmsSubmissionResponse response = client.getSmsClient().submitMessage(message); if (response.getMessages().get(0).getStatus() == MessageStatus.OK) { System.out.println("短信发送成功。"); } }}3. 通过HTTP客户端(OkHttp、Apache HttpClient)与短信网关交互
如果您偏好轻量级方案,不想引入庞大的SDK,可以直接向任何短信提供商(例如sms.ru、smsc.ru)的API发送HTTP请求。
使用OkHttp与假设的网关交互示例:
import okhttp3.*;
public class HttpSmsSender { private static final String API_URL = "https://api.smsgateway.com/send"; private static final Str