如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便。多方比较之后,选择了腾讯云(此处并非做广告),原因有两点:

请参照: 基于SpringBoot构建分模块项目





<properties>
    <java.version>1.8</java.version>
    <!-- 你的其他依赖。。。 -->
    <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version>
</properties>
<dependencies>
    <!-- 你的其他依赖。。。 -->
    <!-- 腾讯短信 -->
    <dependency>
        <groupId>com.github.qcloudsms</groupId>
        <artifactId>qcloudsms</artifactId>
        <version>${tencent.qcloudsms.version}</version>
    </dependency>
</dependencies>package com.wayne.common.utils;
import com.github.qcloudsms.*;
import com.github.qcloudsms.httpclient.HTTPException;
import com.wayne.common.entity.CmsMessageConfig;
import com.wayne.common.exception.CustomException;
import com.wayne.common.form.MessageForm;
import org.json.JSONException;
import java.io.IOException;
/**
 * 发送短信工具类
 * @author Wayne
 * @date 2019/6/26
 */
public class MessageUtils {
    /**
     * 按模板发送短信 支持单发和群发
     * @param isSingle 是否单发 true: 单发,false: 群发
     * @param form 需要发送的短信内容及收信人手机号
     * @param config 短信配置
     * @throws CustomException 发送失败时捕获的异常信息
     */
    public static void sendMessage(Boolean isSingle, MessageForm form, CmsMessageConfig config) throws CustomException {
        validateMessage(form, config);
        String regex = ";";
        String[] params = {form.getCaptcha()};
        String[] phoneNumbers = form.getMobiles().split(regex);
        SmsResultBase result;
        try {
            // 是否单发
            if (isSingle) {
                SmsSingleSender ssender = new SmsSingleSender(config.getAppId(), config.getAppKey());
                result = ssender.sendWithParam("86", phoneNumbers[0], config.getTemplateId(), params, config.getSmsSign(), "", "");
            } else {
                SmsMultiSender msender = new SmsMultiSender(config.getAppId(), config.getAppKey());
                result =  msender.sendWithParam("86", phoneNumbers, config.getTemplateId(), params, config.getSmsSign(), "", "");
            }
            System.out.println(result);
        } catch (HTTPException e) {
            e.printStackTrace();
            throw new CustomException("HTTP响应码错误");
        } catch (JSONException e) {
            e.printStackTrace();
            throw new CustomException("json解析错误");
        } catch (IOException e) {
            e.printStackTrace();
            throw new CustomException("网络IO错误");
        }
    }
    /**
     * 校验参数
     */
    private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException {
        ValidatorUtils.validateEntity(messageForm);
        if (null == messageConfig) {
            throw new CustomException("系统参数异常");
        }
    }
}
CmsMessageConfig配置类
   package com.wayne.common.entity;
   import lombok.Data;
   import javax.persistence.*;
   @Data
   @Table(name = "cms_message_config")
   public class CmsMessageConfig {
       /**
        * 主键
        */
       @Id
       @Column(name = "ID")
       private Integer id;
       /**
        * AppID
        */
       @Column(name = "APP_ID")
       private Integer appId;
       /**
        * AppKey
        */
       @Column(name = "APP_KEY")
       private String appKey;
       /**
        * 短信模板ID
        */
       @Column(name = "TEMPLATE_ID")
       private Integer templateId;
       /**
        * 签名内容
        */
       @Column(name = "SMS_SIGN")
       private String smsSign;
       /**
        * 是否删除,0:否,1:是
        */
       @Column(name = "IS_DELETE")
       private String isDelete;
       /**
        * 状态,0:使用,1:未使用 (同一时间应最多只有一条数据处于使用状态)
        */
       @Column(name = "IS_USE")
       private String isUse;
       /**
        * 创建者ID
        */
       @Column(name = "CREATE_ADMIN_ID")
       private Integer createAdminId;
       @Column(name = "EXTEND1")
       private String extend1;
       @Column(name = "EXTEND2")
       private String extend2;
       @Column(name = "EXTEND3")
       private String extend3;
       @Column(name = "EXTEND4")
       private String extend4;
       @Column(name = "EXTEND5")
       private String extend5;
       @Column(name = "EXTEND6")
       private String extend6;
   }
Service
   @Override
   public ResponseBean sendMessage(MessageForm messageForm) {
       ValidatorUtils.validateEntity(messageForm);
       // 获取正在使用的短信配置: 此处为 从数据库中查询
       CmsMessageConfig messageConfig = getCurrUseMessageConfig();
       try {
           // 发送短信
           MessageUtils.sendMessage(Boolean.FALSE, messageForm, messageConfig);
       } catch (CustomException e) {
           e.printStackTrace();
           return ResponseBean.createInstance(Boolean.FALSE, 401, e.getMessage());
       }
       return ResponseBean.createInstance();
   }
Controller
   @PostMapping("/message/sendMessage")
   public ResponseBean sendMessage(MessageForm messageForm) {
       return messageService.sendMessage(messageForm);
   }


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。