1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!

嗨,大家好,我是小华同学,关注我们获得"最新、最全、最优质"开源项目和高效工作学习方法

"让简单的事情回归简单的本质" ------ 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?

  1. 成本直降:更换服务商无需重写代码,轻松比价选择最优方案
  2. 风险分散:支持多服务商并行配置,自动故障转移
  3. 效率飞跃:开发时间从3天缩短到1小时
  4. 统一监控:所有短信服务统一日志追踪
  5. 持续进化:每月新增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 "短信已发送";
    }
}

同类项目推荐

  1. EasySMS:轻量级短信网关,支持5家服务商

    • 特点:超小体积(仅200KB)
    • 不足:缺乏异步支持
  2. SmsAggregator:企业级短信中台

    • 特点:支持流量控制、报表统计
    • 不足:配置复杂,学习成本高
  3. UniSMS:跨平台解决方案

    • 特点:支持Java/Python/Go
    • 不足:仅支持国际短信

项目地址

github.com/dromara/SMS...

相关推荐
Asthenia041236 分钟前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9651 小时前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom1 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom1 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
JavaGuide1 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04122 小时前
Spring 启动流程:比喻表达
后端
Asthenia04123 小时前
Spring 启动流程分析-含时序图
后端