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"。

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

相关推荐
zSD55rt5a8 小时前
方差在扩散模型保护中的作用
人工智能·harmonyos
人生百态,人生如梦9 小时前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
用户652238438119 小时前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa99883349 小时前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能
wuhanzhanhui9 小时前
当AI遇见储能!2026武汉国际数字能源产业与新型电力及储能技术展览会
人工智能·能源
Tangyuewei9 小时前
给 AI 套上缰绳:Harness Engineering 是什么
人工智能
AI棒棒牛9 小时前
第11讲 | 目标检测任务:边界框、IoU、类别与置信度
人工智能·yolo·目标检测·yolo26
allione9 小时前
AI时代测试方向AI for Testing和Testing for AI
人工智能·ai测试
武子康9 小时前
GPT-Red:自动化红队如何形成 Agent 安全数据飞轮(4 个闭环 + 6 类评测指标 + 5 类风险误读)
人工智能·openai·agent
阿里云大数据AI技术9 小时前
DataWorks Data Agent 实战课堂(二):一句话搞定数据集成+处理,实现端到端数据流水线
人工智能·agent