node.js实现阿里云短信发送

效果图

实现

一、准备工作

1、官网直达网址:

阿里云 - 短信服务

2、按照首页提示依次完成相应资质认证短信模板审核;

3、获取你的accessKeySecretaccessKeyId

方法如下:

获取AccessKey-阿里云帮助中心

4、获取SignName(签名名称)和 TemplateCode(模板code)

二、代码实现

1、项目结构

【/config/index.js】=》参数配置文件

【/server/index.js】=》主执行文件

【node server】=》启动命令

2、引入依赖

在项目根目录,打开控制台,输入如下命令:

npm install @alicloud/sms-sdk --save

3、 修改配置文件【/config/index.js】

储存前面获取的参数:

const config = {

    // AccessKey ID
    accessKeyId: "XXXXXXXXXXXXXXXXXXXXXXXXXX",

    // AccessKey Secret
    secretAccessKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",

    // 签名名称
    signName: "XXXX",

    // 模板CODE => 登录/注册 - 验证码
    templateCode_login: "SMS_4XXXXXXXX",

}

module.exports = config

4、修改主启动文件【/server/index.js】 

实现发送短信:

// 引入依赖
const SMSClient = require('@alicloud/sms-sdk')
// 参数配置文件
const config = require('../config/index.js')

/**
 * 发送短信验证码
 * @param phone 接收用户的手机号
 */
function sendSmsMessage (phone) {

    // 参数配置 sms_client
    let accessKeyId = config.accessKeyId // AccessKey ID
    let secretAccessKey = config.secretAccessKey // AccessKey Secret
    let signName = config.signName // 签名名称
    let templateCode = config.templateCode_login // 短信模板code

    // 发送对象及验证码
    let verify = Math.random().toString().slice(-6) // 随机6位验证码
    let phoneNum = phone // 手机号

    // 初始化 sms_client
    const smsClient = new SMSClient({accessKeyId, secretAccessKey})

    // 发送短信
    smsClient.sendSMS({
        PhoneNumbers: phoneNum, // 发送对象手机号
        SignName: signName, // 签名名称
        TemplateCode: templateCode, // 模版CODE
        TemplateParam: `{"code":'${verify}'}`, // 短信模板变量对应的实际值,JSON格式
    }).then(res => {
        console.log("发送短信sendSmsMessage执行完成:")
        console.log(res)

        // 判断是否发送成功
        if(res.Code === 'OK') {
            console.log('短信发送成功!')
        } else {
            console.log('短信发送失败!')
            console.log(res.Message)
        }
    }).catch(err => {
        console.log("发送短信sendSmsMessage异常错误:")
        console.log(err)
    })
}

sendSmsMessage('13512341234')

5、控制台打印结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/872999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stirling-PDF:基于Web的开源PDF处理工具

PDF文件进行各种各样的操作,比如合并、拆分、加密、解密、旋转、压缩等等,功能超全,而且开源免费,简直是神器! GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perfor…

图形验证码从设计到实现

验证码的使用场景 图形验证码在我们的日常使用中是非常常见的,比如一些App、小程序、PC网站等。涉及到的业务也比较广泛、例如用户登录流程、注册流程、找回密码。下面我们来大致梳理下上述流程: 登录流程 用户首先在登录界面输入手机号然后通过图形验…

心脑血管科张景龙医生:心功能不全,全面解析心脏健康的隐忧

在探讨人体健康的众多话题中,心功能不全是一个不容忽视的重要议题。它不仅关乎心脏这一生命之泵的核心功能,还直接影响到我们的生活质量乃至生命安全。本文旨在以权威、清晰、通俗且实用的方式,全面解析心功能不全的含义、成因、症状、诊断及…

单元测试 Mock不Mock?

文章目录 前言单元测试没必要?Mock不Mock?什么是Mock?Mock的意义何在? 如何Mock?应该Mock什么?Mock 编写示例 总结 前言 前段时间,我们团队就单元测试是否采用 Mock 进行了一番交流,各有各的说法。本文就单元测试 Mock不Mock…

EmguCV学习笔记 VB.Net 9.2 VideoWriter类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一…

Azure AI Search 中的二进制量化:优化存储和加快搜索速度

随着组织继续利用生成式 AI 的强大功能来构建检索增强生成 (RAG) 应用程序和代理,对高效、高性能和可扩展解决方案的需求从未如此强烈。 今天,我们很高兴推出二进制量化,这项新功能可将向量大小减少高达 96%,同时将搜索延迟减少高…

集合及映射

1、集合类图 1)ArrayList与LinkedList 区别 LinkedList 实现了双向队列的接口,对于数据的插入速度较快,只需要修改前后的指向即可;ArrayList对于特定位置插入数据,需要移动特定位置后面的数据,有额外开销 …

Spring Boot-自定义banner

在 Spring Boot 应用中,你可以自定义启动时显示的 banner。这些 banner 可以包括图形、文字或者其他形式的标识。如图所示: 1. 使用 banner.txt 文件 默认情况下,Spring Boot 使用项目的 banner.txt 文件中的内容作为启动时的 banner。你可以…

Verilog语法+:和-:有什么用?

Verilog语法:和-:主要用于位选择,可以让代码更简洁。 一、位选择基础 在Verilog中,位选择可以通过直接索引来实现,例如: reg [7:0] data; wire select_a; wire [2:0] select_b; assign select_a data[3]; assign select_b …

【Hot100】LeetCode—739. 每日温度

目录 1- 思路单调栈 2- 实现⭐739. 每日温度——题解思路 3- ACM 实现 原题链接&#xff1a;739. 每日温度 1- 思路 单调栈 寻找当前位置的下一个比他大的元素的位置利用 Stack 栈维护一个单调栈 当前元素 < 栈顶元素&#xff0c;直接压栈否则 利用 while 循环判断 2- 实…

备忘录怎么隐藏起来 适合记录秘密的备忘录推荐

备忘录作为我们日常生活中常用的记录工具&#xff0c;经常被用来记录重要资料或工作事项。然而&#xff0c;当我们需要在备忘录中记录一些涉及个人隐私的内容时&#xff0c;如何确保这些信息不被他人轻易窥视&#xff0c;保护内容的安全就显得尤为重要。 想象一下&#xff0c;…

【数学建模国赛思路预约】2024全国大学生数学建模竞赛助攻思路、代码、论文

2024年全国大学生数学建模大赛马上就要开始了&#xff0c;大家有没有准备好呢&#xff0c;今年将会和之前一样&#xff0c;将会在比赛赛中时期为大家提供比赛各题的相关解题思路、可运行代码参考以及成品论文。 一、分享计划表如下所示 1、 赛中分享内容包括&#xff08;2023国…

【LeetCode】06.Z字形变换

题目要求 解题思路 首先映入我们脑海的就是暴力。这一方法可行&#xff0c;但是时间复杂度空间复杂度很高&#xff0c;因此我们使用找规律的方法。这样的话我们可以模拟插入下标&#xff0c;这样的话很容易发现首行和末行插入的位置刚好是d2*n-2&#xff0c;而中间行的两个位置…

视频编码与传输 学习笔记 1 一些视频压缩算法的介绍

大概是这么个结构&#xff1a; 说白了&#xff0c;就是视频太大&#xff0c;不压缩不行&#xff0c;因此我们会用压缩比非常夸张但对于视频来说效果很好的压缩方法先对视频压缩&#xff08;source coding&#xff09;然后把压缩后的视频发出去&#xff0c;要看的时候再解压。 就…

3. GIS后端工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

交换机自动化备份配置(H3C_无人值守)

介绍&#xff1a; 在日常运维过程中&#xff0c;需要定时备份设备的配置&#xff0c;在设备数量过于庞大的情况下&#xff0c;对我们的运维工作会造成极大地不便&#xff0c;通过python自动化能够完美解决人工手动保存设备配置的问题。而且自动化运维在未来也一定是大势所趋&a…

STM32G474之TIM1输出PWM信号支持互补输出,死区时间和刹车

STM32G474之TIM1输出PWM信号&#xff0c;互补输出&#xff0c;支持死区时间和刹车。PWM第1通道输出引脚配置&#xff1a;TIM1_CH1映射到PA8,TIM1_CH1N映射到PA7&#xff0c;TIM1_BKIN映射到PA6&#xff0c;用作刹车输入信号。当刹车时&#xff0c;停止PWM波形输出。在使用“比较…

JAVAEE初阶第六节——网络编程套接字

系列文章目录 JAVAEE初阶第六节——网络编程套接字 文章目录 系列文章目录JAVAEE初阶第六节——网络编程套接字 一. 网络编程基础1. 为什么需要网络编程2. 什么是网络编程3.网络编程中的基本概念 3.1 发送端和接收端 3.2 请求和响应 3.3 客户端和服务端 4. 常见的客户端服务…

【2024数模国赛赛题思路公开】国赛C题第三套思路丨无偿自提

C题参考思路 C题是一道优化问题&#xff0c;目的是根据题目所给的种植限制条件以及附件数据建立目标条件优化模型&#xff0c;优化种植策略&#xff0c;有利于方便田间管理&#xff0c;提高生产效益&#xff0c;减少各种不确定因素可能造成的种植风险。整个题目最重要的问题在…