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

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

相关推荐
人工智能AI技术1 小时前
Oracle裁员3万人的警钟:C#程序员如何构建AI工具链反杀,从“被替代“到“驾驭AI“
人工智能·c#
青稞社区.1 小时前
ROLL 团队分享:面向多轮交互 Agentic 场景的 Rollback 课程学习机制探索与实践
人工智能·经验分享·学习·交互
Dev7z1 小时前
原创论文:基于卷积神经网络和递归神经网络的PE恶意文件检测识别
人工智能·神经网络·cnn·pe恶意文件
Web极客码1 小时前
你的新同事已上线:OpenClaw 揭示的智能体(Agent)未来
人工智能
马士兵教育1 小时前
程序员空窗期如何解决?
人工智能·面试·职场和发展
七夜zippoe1 小时前
智能会议新纪元:JiuwenClaw AI会议管理系统全方位实战
人工智能·技能·skills·openjiuwen·记忆系统·jiuwenclaw
廋到被风吹走2 小时前
【Spring AI】Java 开发者构建企业级大模型应用(RAG/Agent)的官方一站式框架
java·人工智能·spring
輕華2 小时前
OpenCV 图像处理实战(上):阈值、平滑滤波与形态学操作从原理到代码
图像处理·人工智能·opencv
啦啦啦_99992 小时前
9. AI面试题之 功能代码实现
java·人工智能