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

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

相关推荐
罗西的思考14 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
IT_陈寒15 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
笃行35015 小时前
从零到上线:用 EdgeOne Makers + CodeBuddy 搭一个「对账核对员」AI Agent
人工智能
用户68563262086916 小时前
Claude Code 乱猜字段名?我给它写了一个"数据库查询约束 Skill"
人工智能
你_好16 小时前
# 给你的产品嵌入一个「会操作界面的 AI 助手」
人工智能
ShallWeL16 小时前
【机器学习】(3)—— 线性回归:梯度下降
人工智能·机器学习
陈广亮16 小时前
Prompt、Context、Harness、Agentic:LLM 应用四层嵌套结构,搞清自己卡在哪一层
人工智能
刺猬的温驯16 小时前
Flow Matching 训练的输入分布问题:从 VAE Latent 统计性质到归一化工程实践——以 VoxFlash-TTS 为例
人工智能·语音合成·tts
机器之心16 小时前
近80年后,埃尔德什经典「拉姆齐数下界」,被三位中国学者首次指数级改进
人工智能·openai
机器之心16 小时前
Nvidia都在点赞的LoopWM世界模型,竟然来自一家中国初创FaceMind?
人工智能·openai