springboot 如何实现发送短信

在 Spring Boot 中实现发送短信通常借助第三方短信服务提供商,如阿里云短信服务、腾讯云短信服务、华为云短信服务等。下面以阿里云短信服务为例,详细介绍在 Spring Boot 项目中实现发送短信的步骤。

1. 开通阿里云短信服务并获取相关信息

  • 注册阿里云账号:如果还没有阿里云账号,需要先进行注册。
  • 开通短信服务:登录阿里云控制台,开通短信服务,并完成相关的配置,如签名、模板的申请和审核。
  • 获取 AccessKey:在阿里云控制台的 AccessKey 管理页面创建并获取 AccessKey ID 和 AccessKey Secret,这两个信息用于身份验证。

2. 添加依赖

在 pom.xml 中添加阿里云短信服务的 Java SDK 依赖:

收起

xml

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 阿里云短信服务 SDK -->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>dysmsapi20170525</artifactId>
        <version>2.0.22</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>tea-openapi</artifactId>
        <version>0.2.1</version>
    </dependency>
</dependencies>

3. 配置阿里云短信服务信息

在 application.properties 或 application.yml 中配置阿里云短信服务的相关信息:

收起

properties

aliyun.sms.access-key-id=your-access-key-id
aliyun.sms.access-key-secret=your-access-key-secret
aliyun.sms.sign-name=your-sign-name
aliyun.sms.template-code=your-template-code

将 your-access-key-idyour-access-key-secret 替换为你在阿里云获取的 AccessKey ID 和 AccessKey Secretyour-sign-name 替换为申请通过的短信签名,your-template-code 替换为申请通过的短信模板代码。

4. 创建短信发送工具类

创建一个工具类来封装短信发送的逻辑:

收起

java

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class SmsSender {

    @Value("${aliyun.sms.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.sms.access-key-secret}")
    private String accessKeySecret;

    @Value("${aliyun.sms.sign-name}")
    private String signName;

    @Value("${aliyun.sms.template-code}")
    private String templateCode;

    public boolean sendSms(String phoneNumber, Map<String, String> templateParams) {
        try {
            // 创建 Config 对象并设置 AccessKey ID 和 AccessKey Secret
            Config config = new Config()
                   .setAccessKeyId(accessKeyId)
                   .setAccessKeySecret(accessKeySecret);
            // 访问的域名
            config.endpoint = "dysmsapi.aliyuncs.com";
            // 创建短信服务客户端
            Client client = new Client(config);

            // 创建短信发送请求对象
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                   .setPhoneNumbers(phoneNumber)
                   .setSignName(signName)
                   .setTemplateCode(templateCode)
                   .setTemplateParam(com.alibaba.fastjson.JSON.toJSONString(templateParams));

            // 发送短信
            SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);

            // 判断短信是否发送成功
            return "OK".equals(sendSmsResponse.getBody().getCode());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

5. 创建控制器进行测试

创建一个控制器类,在其中调用短信发送工具类来发送短信:

收起

java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class SmsController {

    @Autowired
    private SmsSender smsSender;

    @GetMapping("/sendSms")
    public String sendSms(@RequestParam String phoneNumber) {
        // 假设短信模板中有一个参数 code 用于传递验证码
        Map<String, String> templateParams = new HashMap<>();
        templateParams.put("code", "123456");

        boolean result = smsSender.sendSms(phoneNumber, templateParams);
        if (result) {
            return "短信发送成功";
        } else {
            return "短信发送失败";
        }
    }
}

6. 测试短信发送功能

启动 Spring Boot 应用程序,访问 http://localhost:8080/sendSms?phoneNumber=your-phone-number,将 your-phone-number 替换为实际要接收短信的手机号码。如果一切配置正确,该手机号码将收到一条包含验证码的短信。

注意事项

  • 确保申请的短信签名和模板已通过审核,否则短信无法发送成功。
  • 不同的短信模板可能有不同的参数要求,需要根据实际情况修改 templateParams 中的参数。
  • 阿里云短信服务有一定的使用限制和费用,需要关注相关的使用规则和计费标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lozhyf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值