JAVA实战:借助阿里云实现短信发送功能
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来的日子里不定期地为大家呈上这些领域的知识宝藏与实用经验分享🎁。每一个点赞👍,都如同春日里的一缕阳光,给予我满满的动力与温暖,让我们在学习成长的道路上相伴而行,共同进步✨。期待你的关注与点赞哟🤗!
在如今的很多应用场景中,短信发送功能是必不可少的,比如用户注册验证、密码找回等等。阿里云提供了便捷可靠的短信服务,今天我们就来详细讲讲如何在 Java 项目中利用阿里云来发送短信。
一、前期准备
-
注册阿里云账号并开通短信服务
首先,你需要有一个阿里云账号,如果没有的话,可以前往阿里云官网(阿里云-计算,为了无法计算的价值 )进行注册。注册完成后,登录阿里云控制台,搜索 “短信服务” 并开通该服务。 -
创建短信签名和短信模板
在短信服务中,你要创建符合你业务需求的短信签名(一般是代表发送短信的主体名称,需要审核通过)以及短信模板(短信具体的内容格式,包含一些变量占位符等,同样需要审核)。审核通过后,我们才能在代码中使用它们来发送短信。 -
获取 AccessKey 和 SecretKey
进入阿里云控制台的 “AccessKey 管理” 页面,创建一对 AccessKey 和 SecretKey。这两个密钥非常重要,相当于程序访问阿里云短信服务的凭证,一定要妥善保管,不要泄露出去。
二、项目搭建及依赖引入(以 Maven 项目为例)
-
创建 Java 项目(如果已有项目可跳过此步)
使用你常用的 IDE(如 Intellij IDEA、Eclipse 等)创建一个新的 Java 项目,或者打开已有的 Java 项目。 -
引入阿里云短信服务的 Java SDK 依赖
在项目的pom.xml文件(Maven 项目配置文件)中添加如下依赖:<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>2.1.0</version> </dependency>上述依赖会引入阿里云核心 SDK 以及短信服务相关的 Java 开发包,方便我们后续调用阿里云的短信接口。
三、编写代码实现短信发送功能
下面是一个简单的 Java 类,用于实现发送短信的功能:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v2.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v2.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.Profile;public class AliyunSmsSender {// 你的阿里云短信服务的AccessKey IDprivate static final String ACCESS_KEY_ID = "your_access_key_id";// 你的阿里云短信服务的SecretAccessKeyprivate static final String SECRET_ACCESS_KEY = "your_secret_access_key";// 短信签名名称,要和你在阿里云控制台审核通过的一致private static final String SIGN_NAME = "your_sign_name";// 短信模板Code,对应阿里云控制台审核通过的短信模板private static final String TEMPLATE_CODE = "your_template_code";public static void sendSms(String phoneNumbers, String templateParam) throws ClientException {// 设置地域ID,短信服务对应的地域,比如国内常用的是"cn-hangzhou"Profile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, SECRET_ACCESS_KEY);IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();// 设置发送短信的电话号码,支持多个号码,以逗号分隔request.setPhoneNumbers(phoneNumbers);// 设置短信签名名称request.setSignName(SIGN_NAME);// 设置短信模板Coderequest.setTemplateCode(TEMPLATE_CODE);// 设置短信模板中的变量参数,格式为JSON字符串,例如:{"code":"123456"}request.setTemplateParam(templateParam);SendSmsResponse response = client.sendSms(request);if (response.getCode()!= null && response.getCode().equals("OK")) {System.out.println("短信发送成功");} else {System.out.println("短信发送失败,错误码:" + response.getCode() + ",错误信息:" + response.getMessage());}}public static void main(String[] args) {try {// 示例电话号码,这里替换成真实的接收短信手机号String phoneNumber = "138xxxxxxxx";// 示例短信模板参数,按照你的短信模板中定义的变量来设置对应的值,此处以JSON格式字符串示例String templateParams = "{\"code\":\"123456\"}";sendSms(phoneNumber, templateParams);} catch (ClientException e) {e.printStackTrace();}} }在上述代码中:
- 首先定义了一些常量,包括
ACCESS_KEY_ID、SECRET_ACCESS_KEY、SIGN_NAME和TEMPLATE_CODE,这些需要替换成你自己在阿里云控制台获取和配置的实际内容。 sendSms方法接收要发送短信的手机号码以及短信模板对应的参数(以 JSON 格式字符串传入,根据模板中的变量来设置具体值),然后通过构建SendSmsRequest对象,设置相关的请求参数,如电话号码、签名、模板代码和模板参数等,接着利用IAcsClient发送请求,并根据响应结果判断短信是否发送成功。main方法则提供了一个简单的测试示例,你可以将示例中的电话号码和短信模板参数替换为真实有效的内容进行测试。
四、注意事项
- 网络问题:确保你的服务器或者运行代码的环境能够正常访问阿里云短信服务的接口,避免因网络限制导致短信发送失败。
- 短信内容规范:一定要严格按照阿里云短信服务的内容规范来创建短信模板,避免出现违规内容导致审核不通过或者短信发送受阻。
- 密钥安全:
AccessKey和SecretKey属于敏感信息,要妥善保管,最好不要硬编码在代码中,可以通过配置文件结合加密等方式来更安全地使用它们。
相关文章:
JAVA实战:借助阿里云实现短信发送功能
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
高阶函数:JavaScript 编程中的魔法棒
在JavaScript的世界里,高阶函数是一种强大的工具,它允许我们将函数作为参数传递或将函数作为返回值。这种特性使得JavaScript代码更加灵活和强大。本文将深入探讨高阶函数的定义、用法以及在实际项目中的最佳实践,帮助大家更好地理解和应用这…...
Android 12.0 Launcher3从首页开始安装app功能实现
1.前言 在12.0的系统rom定制化开发中,在进行Launcher3的某些功能开发实现过程中,在某些项目中,安装的app比较多,要求在launcher3的首页开始安装 app应用,接下来就需要分析下app安装图标排序的流程,然后在实现相关的功能 2. Launcher3从首页开始安装app功能实现的核心…...
软考高级架构 - 10.5 软件架构演化评估方法
10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则,并为每条原则设计了简单而有效的度量方法,用于从系统整体层面提供实用信息,帮助评估和指导架构演化。 演化成本控制:成本小于重新开发成本,经济高效。进…...
半导体制造全流程
半导体制造是一个极其复杂且精密的过程,主要涉及将硅片加工成功能强大的芯片。以下是半导体制造的全流程概述: 1. 硅材料制备 硅提纯: 使用冶金级硅,进一步提纯为高纯度硅(电子级硅),纯度可达 …...
国科大网络协议安全期末
完整资料仓库地址:https://gitee.com/etsuyou/UCAS-Network-Protocol-Security 部分题目: 六 论述题10*220 试讨论IPv6解决了IPv4的哪些“痛点”,以及IPv6存在的安全问题试比较IPsec与SSL的安全性 五 简答题5*315 简述MAC欺骗和ARP欺骗的…...
ES动态索引——日志es索引数据按月份存储
一、定义ES索引 NoArgsConstructor AllArgsConstructor Data Accessors(chain true) Document(indexName "charge_pile_log" Constants.ES_TIME_DYNAMIC_INDEX) //(索引名称动态,前面固定,后面月份) public class ChargePileLogESDomain {…...
NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法
论文速读|Transforming and Combining Rewards for Aligning Large Language Models 论文信息: 简介: 本文探讨了如何使大型语言模型(LLMs)与人类偏好对齐。传统的对齐方法是先从偏好数据中学习一个奖励模型,然后使用这…...
蓝桥杯我来了
最近蓝桥杯报名快要截止了,我们学校开始收费了,我们学校没有校赛,一旦报名缴费就是省赛,虽然一早就在官网上报名了,但是一直在纠结,和家人沟通,和朋友交流,其实只是想寻求外界的支持…...
Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析)内含实际案例教学
摘要 用Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析),包含画布创建、节点设计、拖拽实现(实际案例)、节点连线、交互功能,后续文章持续更新。 注:本文章可以根据目录进行导航 文档支持 AntVX6使用文档 https://x6.antv.antgroup.com/tutorial…...
【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)
前言 每天和你一起刷 LeetCode 每日一题~ 小聊两句 1、今天是 12.13 南京大屠杀国家公祭日。铭记历史,勿忘国耻。 2、今天早上去看了 TGA 年度游戏颁奖,小机器人拿下了年度最佳游戏,所有人都震惊了,大伙纷纷问到,谁…...
Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比
软件名称物流系统仿真工业布局仿真动画效果数据分析优化虚拟现实/混合现实二次开发虚拟电控和PLC调试 软件行业内特殊功能Emulate3D1.物流设备模块完备,功能灵活设置,涵盖各种设备形态和运作方式 2.唯一将摩擦力、重力、阻力等物理属性融入到物流运动中&…...
深度学习day4|用pytorch实现猴痘病识别
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 🍺要求: 训练过程中保存效果最好的模型参数。 加载最佳模型参数识别本地的一张图片。 调整网络结构使测试集accuracy到达88%&#x…...
批量导出工作簿中高清图片-Excel易用宝
我同事在工作簿中做了三个图表,现在需要将工作簿中的图标导出保存为高清图片,通过右键另存为保存的图片并非高清图片,其实要把Excel工作簿中的图表或图片对象导出为高清图片也很简单。 单击Excel易用宝 Plus,导出高清图片。 在导出…...
外观模式的理解和实践
外观模式(Facade Pattern)是一种常用的软件设计模式,它提供了一个统一的接口,用来访问子系统中的一群接口。该模式定义了一个高层的接口,使得子系统更容易使用。简单来说,外观模式就是通过引入一个外观角色…...
linux离线安装部署redis
版本信息 linux版本:CentOS-7-x86_64 redis版本:redis-6.2.6 VMware:VMware-workstation-full-16.1.1 xshell: Xshell-7.0 安装 1.查看当前虚拟机ip命令:ifconfig -a 2.xhell连接虚拟机 ,在xshell页面点击文件-…...
网管平台(基础篇):路由器的介绍与管理
路由器简介 路由器(Router)是一种计算机网络设备,它的主要作用是将数据通过打包,并按照一定的路径选择算法,将网络传送至目的地。路由器能够连接两个或更多个网络,并根据信道的情况自动选择和设定路由&…...
数据结构——跳表
目录 1.什么是跳表-skiplist 2.skiplist的效率如何保证? 3.skiplist的实现 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的…...
活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识
课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 课…...
PyCharm如何导入库( 包 )
目录 1.在主界面中导库 2.用设置->项目安装库 2.1.使用右上方按钮 2.2.使用右下方Python解释器 3.使用左下角终端导库 1.在主界面中导库 在主界面输入导库后等待一会儿,会在那一行出现一个红色灯。 图1 红色灯 我们点击红色灯,会出现 图2 错误选…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
