springboot对接阿里云短信

准备工作

注册阿里云账号并开通短信服务。在阿里云控制台获取AccessKey ID和AccessKey Secret。创建短信签名和模板,并记录签名名称和模板CODE。

添加依赖

在Spring Boot项目的pom.xml文件中添加阿里云短信SDK依赖:

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.1.0</version>
</dependency>

配置参数

application.ymlapplication.properties中配置阿里云短信参数:

yaml 复制代码
aliyun:
  sms:
    access-key-id: your-access-key-id
    access-key-secret: your-access-key-secret
    sign-name: your-sign-name
    template-code: your-template-code

创建配置类

创建一个配置类读取配置参数:

java 复制代码
@Configuration
@ConfigurationProperties(prefix = "aliyun.sms")
@Data
public class AliyunSmsConfig {
    private String accessKeyId;
    private String accessKeySecret;
    private String signName;
    private String templateCode;
}

实现短信服务

创建短信服务类,封装发送短信的逻辑:

java 复制代码
@Service
@RequiredArgsConstructor
public class SmsService {
    private final AliyunSmsConfig smsConfig;

    public SendSmsResponse sendSms(String phoneNumber, String templateParam) throws ClientException {
        DefaultProfile profile = DefaultProfile.getProfile(
            "cn-hangzhou", 
            smsConfig.getAccessKeyId(), 
            smsConfig.getAccessKeySecret());
        IAcsClient client = new DefaultAcsClient(profile);

        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(phoneNumber);
        request.setSignName(smsConfig.getSignName());
        request.setTemplateCode(smsConfig.getTemplateCode());
        request.setTemplateParam(templateParam);

        return client.getAcsResponse(request);
    }
}

使用示例

在控制器中调用短信服务:

java 复制代码
@RestController
@RequiredArgsConstructor
public class SmsController {
    private final SmsService smsService;

    @GetMapping("/sendSms")
    public String sendSms(@RequestParam String phoneNumber) {
        try {
            String templateParam = "{\"code\":\"123456\"}";
            SendSmsResponse response = smsService.sendSms(phoneNumber, templateParam);
            return "短信发送成功,请求ID:" + response.getRequestId();
        } catch (ClientException e) {
            return "短信发送失败:" + e.getMessage();
        }
    }
}

注意事项

确保短信签名和模板已通过阿里云审核。模板参数需严格按照阿里云要求的JSON格式传递。手机号码格式需为国际区号加号码,如"8613800000000"。

阿里云短信服务有频率限制,需注意调用频率避免触发限流。建议对发送失败的情况做好日志记录和重试机制。

相关推荐
Bode_20029 分钟前
制造企业实现产品服务化的路径
人工智能
Rubin智造社10 分钟前
Claude Code开发者大会系列2|“饮鸩止渴”还是“即刻解药”?Anthropic与SpaceX的联姻内幕
大数据·数据库·人工智能·开发者大会·anthropic·claude code
AI机器学习算法15 分钟前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
Sherlock Ma6 小时前
西瓜书《机器学习》全网最详细解读 第一章:绪论
人工智能·深度学习·考研·机器学习·学习方法·西瓜书·改行学it
烟锁池塘柳06 小时前
【机器学习】一文彻底搞懂正则化(Regularization)
人工智能·深度学习·机器学习
一个天蝎座 白勺 程序猿6 小时前
从AlphaGo到ChatGPT:机器学习基础概念的全景式拆解与工程实践思考
人工智能·机器学习·chatgpt
Luhui Dev7 小时前
Anthropic 2026 最新 Agent Harness 架构完整拆解:Managed Agents
人工智能·架构·agent·luhuidev
skywalk81637 小时前
安装superpowers-zh (AI 编程超能力 · 中文增强版)
人工智能
经济元宇宙7 小时前
摄影培训行业百科:机构选择与学习路径全解析
大数据·人工智能·学习
哥只是传说中的小白8 小时前
GrsaiApi官方正版字字动画插件!支持nano banana pro和gpt-image-2模型
人工智能·gpt·ai作画·开源·aigc·api