嗨,大家好,我是小华同学,关注我们获得"最新、最全、最优质"开源项目和高效工作学习方法
"让简单的事情回归简单的本质" ------ SMS4J 项目宣言
SMS4J
是一款由国内技术团队打造的短信聚合框架,专为解决多短信服务商接入难题而生。它就像短信界的"瑞士军刀",目前已整合21家主流短信服务商,从阿里云、腾讯云到中国移动云MAS,开发者只需通过简单配置即可实现多平台无缝切换。
核心功能亮点
1. 多厂商一键切换
支持包括阿里云、华为云、京东云等21家服务商,更换服务商只需修改配置文件:
yaml
sms:
blends:
aliyun:
accessKeyId: YOUR_KEY
signature: 公司签名
huawei:
appKey: YOUR_KEY
sender: 8823040504797
2. 极简API设计
三行代码完成短信发送:
java
// 获取阿里云短信服务
SmsBlend aliyun = SmsFactory.getSmsBlend("aliyun");
// 发送验证码
aliyun.sendMessage("18888888888", "123456");
// 批量发送
aliyun.massTexting(List.of("18888888888","16666666666"), "系统通知");
3. 智能线程池管理
内置可配置化线程池,轻松应对高并发场景:
makefile
sms:
corePoolSize: 20 # 核心线程数
maxPoolSize: 100 # 最大线程数
queueCapacity: 200 # 等待队列容量
4. 模板灵活配置
支持固定模板与自定义模板双模式:
csharp
// 固定模板发送
aliyun.sendMessage("18888888888", "123456");
// 自定义模板
Map<String, String> params = new HashMap<>();
params.put("code", "654321");
params.put("time", "5分钟");
huawei.sendMessage("16666666666", params);
5. 全链路可监控
提供发送状态回调机制,实时掌握短信投递情况:
arduino
// 设置华为云回调
huawei.setStatusCallBack("https://your-domain.com/callback");
技术架构解析
层级 | 技术实现 | 功能说明 |
---|---|---|
接口层 | 统一API规范 | 提供标准化发送接口 |
适配层 | 厂商SDK适配器 | 封装各平台差异化实现 |
核心层 | Spring Boot Starter | 自动化配置 |
异步层 | ThreadPoolTaskExecutor | 异步任务处理 |
扩展层 | SPI机制 | 支持自定义扩展 |
典型应用场景
场景1:电商平台
- 订单通知
- 物流提醒
- 促销推送
arduino
// 大促期间批量发送
jdCloud.massTexting(vipUsers, "年中大促5折优惠!");
场景2:政务系统
- 审批通知
- 会议提醒
- 政策传达
csharp
// 政务短信模板
Map<String, String> params = new HashMap<>();
params.put("applicant", "张先生");
params.put("date", "2024-03-15");
ctyun.sendMessage("18888888888", params);
场景3:金融行业
- 交易验证
- 风险预警
- 账户变动
ini
// 风控验证码
String code = generateRandomCode();
aliyun.sendMessage(userPhone, code);
redis.saveCode(userId, code);
同类项目对比
项目 | 支持厂商 | 配置复杂度 | 学习曲线 | 扩展性 | 社区活跃度 |
---|---|---|---|---|---|
SMS4J | 21+ | ★☆☆☆☆ | 1天 | 强 | 高 |
阿里云SDK | 1 | ★★★☆☆ | 3天 | 弱 | 中 |
腾讯云SDK | 1 | ★★★★☆ | 3天 | 弱 | 中 |
短信宝 | 3 | ★★☆☆☆ | 2天 | 中 | 低 |
为什么选择SMS4J?
- 成本直降:更换服务商无需重写代码,轻松比价选择最优方案
- 风险分散:支持多服务商并行配置,自动故障转移
- 效率飞跃:开发时间从3天缩短到1小时
- 统一监控:所有短信服务统一日志追踪
- 持续进化:每月新增1-2个服务商支持
快速入门指南
步骤1:添加依赖
xml
<dependency>
<groupId>org.dromara.sms4j</groupId>
<artifactId>sms4j-spring-boot-starter</artifactId>
<version>3.3.4</version>
</dependency>
步骤2:配置服务商
yaml
sms:
blends:
aliyun:
accessKeyId: AKID123456
accessKeySecret: SECRET789
signature: 阿里云签名
templateId: SMS_215125134
huawei:
appKey: 5N6fvXXXX920HaWhVXXXXXX7fYa
app-secret: Wujt7EYzZTBXXXXXXEhSP6XXXX
signature: 华为签名
sender: 8823040504797
步骤3:代码调用
kotlin
@RestController
public class SmsController {
@GetMapping("/sendAliyun")
public String sendAliyunSms() {
SmsFactory.getSmsBlend("aliyun")
.sendMessage("18888888888", "您的验证码是:123456");
return "短信已发送";
}
}
同类项目推荐
-
EasySMS:轻量级短信网关,支持5家服务商
- 特点:超小体积(仅200KB)
- 不足:缺乏异步支持
-
SmsAggregator:企业级短信中台
- 特点:支持流量控制、报表统计
- 不足:配置复杂,学习成本高
-
UniSMS:跨平台解决方案
- 特点:支持Java/Python/Go
- 不足:仅支持国际短信