跳至主要內容

🍵在JavaSE环境使用

heng大约 5 分钟

在JavaSE环境中集成

1.创建项目

在 IDE 中新建一个 Java 项目,例如:sms-demo-javase

2.添加依赖

在项目中添加maven依赖:

<dependency>
    <groupId>org.dromara.sms4j</groupId>
    <artifactId>sms4j-javase-plugin</artifactId>
    <version> version </version>
</dependency>

3.初始化短信服务商配置

在调用短信发送之前进行短信配置,多次发送只配置一次即可。当前支持4种配置方式,可根据需要选择一种进行配置。具体配置项可参考基础配置和厂商配置等内容。

自V3.0.0版本开始,sms4j开始支持单厂商多配置

  • 方式1:使用yaml配置文件

在资源目录中创建配置文件sms4j.yml,然后写入相关配置,书写方式同springboot的yaml配置

sms:
  # 标注从yml读取配置
  config-type: yaml
  blends:
    # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
    tx1:
      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
      supplier: tencent
      #您的accessKey
      access-key-id: 您的accessKey
      #您的accessKeySecret
      access-key-secret: 您的accessKeySecret
      #您的短信签名
      signature: 您的短信签名
      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
      template-id: xxxxxxxx
      #您的sdkAppId
      sdk-app-id: 您的sdkAppId
      # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
    tx2:
      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
      supplier: tencent
      #您的accessKey
      access-key-id: 您的accessKey
      #您的accessKeySecret
      access-key-secret: 您的accessKeySecret
      #您的短信签名
      signature: 您的短信签名
      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
      template-id: xxxxxxxx
      #您的sdkAppId
      sdk-app-id: 您的sdkAppId
    alibaba:
      #如果厂商标识与自定义标识一致,可以省略supplier
      #supplier: alibaba
      access-key-id: 您的accessKey
      access-key-secret: 您的accessKeySecret
      template-id: 您的templateId
      template-name: 您的templateName
      signature: 您的短信签名

调用配置方法。fromYaml()方法会读取并加载sms4j.yml中的配置

SEInitializer.initializer().fromYaml();
  • 方式2:使用yaml配置字符串

调用fromYaml(String),直接传入yaml配置字符串

String yaml = "sms:\n" +
                "  config-type: yaml\n" +
                "  blends:\n" +
                "    tx1:\n" +
                "      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分\n" +
                "      supplier: tencent\n" +
                "      #您的accessKey\n" +
                "      access-key-id: 您的accessKey\n" +
                "      #您的accessKeySecret\n" +
                "      access-key-secret: 您的accessKeySecret\n" +
                "      #您的短信签名\n" +
                "      signature: 您的短信签名\n" +
                "      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置\n" +
                "      template-id: xxxxxxxx\n" +
                "      #您的sdkAppId\n" +
                "      sdk-app-id: 您的sdkAppId\n" +
                "      # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)\n" +
                "    tx2:\n" +
                "      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分\n" +
                "      supplier: tencent\n" +
                "      #您的accessKey\n" +
                "      access-key-id: 您的accessKey\n" +
                "      #您的accessKeySecret\n" +
                "      access-key-secret: 您的accessKeySecret\n" +
                "      #您的短信签名\n" +
                "      signature: 您的短信签名\n" +
                "      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置\n" +
                "      template-id: xxxxxxxx\n" +
                "      #您的sdkAppId\n" +
                "      sdk-app-id: 您的sdkAppId";
SEInitializer.initializer().fromYaml(yaml);
  • 方式3:使用json配置字符串
String json = "{\n" +
                "    \"sms\": {\n" +
                "        \"configType\": \"YAML\",\n" +
                "        \"blends\": {\n" +
                "            \"tx1\": {\n" +
                "                \"supplier\": \"tencent\",\n" +
                "                \"accessKeyId\": \"您的accessKey\",\n" +
                "                \"accessKeySecret\": \"您的accessKeySecret\",\n" +
                "                \"signature\": \"您的短信签名\",\n" +
                "                \"templateId\": \"xxxxxxxx\",\n" +
                "                \"sdkAppId\": \"您的sdkAppId\"\n" +
                "            },\n" +
                "            \"tx2\": {\n" +
                "                \"supplier\": \"tencent\",\n" +
                "                \"accessKeyId\": \"您的accessKey\",\n" +
                "                \"accessKeySecret\": \"您的accessKeySecret\",\n" +
                "                \"signature\": \"您的短信签名\",\n" +
                "                \"templateId\": \"xxxxxxxx\",\n" +
                "                \"sdkAppId\": \"您的sdkAppId\"\n" +
                "            }\n" +
                "        }\n" +
                "    }\n" +
                "}";
SEInitializer.initializer().fromJson(json);
  • 方式4:自定义配置

通过各厂商构造器实例化配置实例,然后初始化

// 短信配置
SmsConfig smsConfig = new SmsConfig();
// 各服务商
List<SupplierConfig> blends = new ArrayList<>();
// tx1 - 腾讯云
TencentConfig tx1 = new TencentConfig();
tx1.setConfigId("tx1");
tx1.setAccessKeyId("您的accessKey");
tx1.setAccessKeySecret("您的accessKeySecret");
tx1.setSignature("您的短信签名");
tx1.setTemplateId("xxxxxxxx");
tx1.setSdkAppId("您的sdkAppId");
blends.add(tx1);
// tx2 - 腾讯云
TencentConfig tx2 = new TencentConfig();
tx2.setConfigId("tx2");
tx2.setAccessKeyId("您的accessKey");
tx2.setAccessKeySecret("您的accessKeySecret");
tx2.setSignature("您的短信签名");
tx2.setTemplateId("xxxxxxxx");
tx2.setSdkAppId("您的sdkAppId");
blends.add(tx2);
// alibaba - 阿里云
AlibabaConfig alibaba = new AlibabaConfig();
alibaba.setAccessKeyId("您的accessKey");
alibaba.setAccessKeySecret("您的accessKeySecret");
alibaba.setSignature("您的templateId");
alibaba.setTemplateId("您的templateName");
alibaba.setTemplateName("您的短信签名");
blends.add(alibaba);
SEInitializer.initializer().fromConfig(smsConfig, blends);

4.其他配置

  • 配置缓存实例

V3.0.0新增功能

使用者可以通过registerSmsDao方法配置缓存实例。

sms4j提供了基于内存的缓存实现SmsDaoDefaultImpl,也可以通过实现SmsDao接口创建自己的缓存实现类。

如果开启了短信限制(restricted=true),则必须配置缓存实现。

// 实例化缓存实例(根据实现方式实例化)
SmsDao smsDao = SmsDaoDefaultImpl.getInstance();
// 初始化配置
SEInitializer.initializer()
    // 配置方法调用应在fromXXX方法之前
    .registerSmsDao(smsDao)
    .fromYaml();
  • 配置自定义服务商

V3.0.0新增功能

使用者可以根据需要扩展系统尚未支持的其他短信服务商的构建方式,并在初始化配置时将构建的工厂实例进行注册

详细配置方式可参见自定义供应商扩展

5.发送短信

调用发送方法发送短信。更多发送功能请参考标准短信、异步短信等相应短信发送介绍

SmsFactory.getSmsBlend("tx1").sendMessage("手机号码", "短信");