百度可以搜索到很多短信服务提供商,这里以腾讯云的短信服务为例(阿里云的也尝试了一下,可能是我运气不好,试了好几次都没有通过审核,阿里云的现在好像也需要资质了,企业或者商户),腾讯云刚开通短信服务赠送100条免费体验,对于我用来搞毕设仅使用验证码来说非常的够用,并且好通过审核,效率挺高。

1.注册腾讯云

这里就不过多赘述了可以使用vx扫一扫快速注册。

2.开通短信服务

 

新开通短信服务赠送100条短信

3.创建短信签名

 这里测试过小程序和公众号,两者区别不大,有哪个用哪个,都没有建议公众号注册一个也比较快;证明上传不知道怎么传,可以点击“查看案例”根据官方提示操作。

创建签名之后,状态会进入“待审核”,审核通过之后会变成“已通过”,我申请的时候大概也就十来分钟左右就通过了,正好可以趁着这个时间去创建正文模板。

4.创建正文模板

 这里短信类型有两种,营销短信需要企业认证;一般需要生成随机验证码或者自定义内容时需要加上“{1}”用作占位符,例如:验证码为:123456

5.短信发送操作

maven工程在pom文件中导入依赖 

<!--腾讯云短信验证码-->
<dependency>
	<groupId>com.tencentcloudapi</groupId>
	<artifactId>tencentcloud-sdk-java</artifactId>
	<version>3.1.62</version>
</dependency>

 在腾讯云上可以自动生成代码

 这里我们需要得到几个重要的参数SmsSdkAppIdTemplateIdSignName,下面依次介绍

SmsSdkAppId:

 TemplateId:

 SignName:

 将参数全部填写

 全部填写后,验证码以“123456”为例,进行在线测试,显示已发送成功

 验证码收到啦,完美!!!

 接下来就可以把代码复制粘贴到项目中

如果在腾讯云上找不到代码生成的小伙伴,可以直接粘贴下面代码也是一样的,改一下参数即可

 发送短信完整代码如下

import com.tencentcloudapimon.Credential;
import com.tencentcloudapimon.profile.ClientProfile;
import com.tencentcloudapimon.profile.HttpProfile;
import com.tencentcloudapimon.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.*;

public class SendSms
{
    public static void main(String [] args) {
        try{
            // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
            // 密钥可前往https://console.cloud.tencent/cam/capi网站进行获取
            Credential cred = new Credential("SecretId", "SecretKey");
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();
            //手机号数组
            String[] phoneNumberSet1 = {"+8612345678912"};
            req.setPhoneNumberSet(phoneNumberSet1);
            
            //短信应用id   “SmsSdkAppId”   填入上文获取的对应参数   这里示例随便填的
            req.setSmsSdkAppId("123456789");
            //签名内容   “SignName”   填入上文获取的对应参数   这里示例随便填的
            req.setSignName("hellocsdn");
            //正文模板id   “TemplateId”   填入上文获取的对应参数   这里示例随便填的
            req.setTemplateId("1234567");

            //验证码数组
            String[] templateParamSet1 = {"123456"};
            req.setTemplateParamSet(templateParamSet1);

            // 返回的resp是一个SendSmsResponse的实例,与请求对象对应
            SendSmsResponse resp = client.SendSms(req);
            // 输出json格式的字符串回包
            System.out.println(SendSmsResponse.toJsonString(resp));
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
    }
}

 这样还不算完成,真正在项目中跑起来还需要两个参数:SecretIdSecretKey,这两个是腾讯云账号的秘钥参数。之所以在腾讯云上不用配置,是因为他会自动读取当前账号的这两个属性放入其中yyds

 

 将复制来的两个参数粘贴至这里

Credential cred = new Credential("SecretId", "SecretKey");

修改之后运行报错了,这个原因是没有联网,因为短信是通过腾讯云发送的,所以需要本地有网络,有网的情况下如果还是不好使可能是网络波动切换一个试试就可以了,这种情况我也遇到好多次了,结果自己开的热点  心痛。。。

 

 这次好了,发送成功了

 看到信息发送过来了,为了区别第一次发送的,这次修改为六个零,可以看到成功啦!!!

新手小白,如有不足之处,多多包涵

如果文章中有什么不对的的地方或者需要改进的地方,还请大佬们不吝赐教

更多推荐

Java实现腾讯云短信服务功能(保姆级,超详细,附源码)