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.yml或application.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"。

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

相关推荐
IT_陈寒3 分钟前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
一只游鱼3 分钟前
LangGraph快速入门 —— Agent 是怎么转起来的
人工智能·ai·agent·langgraph
Rocky Ding*1 小时前
深入浅出GroundingPI技术解析:精确空间感知如何迁移到机器人动作
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·具身智能
starzy19901 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
QYR_111 小时前
全球新能源汽车热管理零部件市场2032年预计突破1854亿元,CAGR达8.2%
人工智能
jarvisuni1 小时前
白嫖Tripo3D ?Kimi 3D Make可以玩起来!
人工智能·ai编程
黑十1 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
明月_清风2 小时前
用自然语言操控真机:Google Artemis 移动端 AI Agent 上手与实践
人工智能·后端
没落之王2 小时前
三易五行看宋朝的三界确立
大数据·人工智能·算法
miofly2 小时前
DeepSeek 开源 Super-agent 架构:AI 主动发现 Bug 并提交 PR
人工智能