云开发--实现发送邮件+短信+链接跳转小程序功能

目录

1、小程序实现发送邮件

准备一个qq邮箱,并启动SMTP服务

确定小程序云开发环境,并新建云函数

 2、小程序实现发送短信

确定应用

确定签名  

确定模板

编写云函数-发送短信

3、链接跳转小程序

H5 配置


学习记录:

1、小程序实现发送邮件

  • 准备一个qq邮箱,并启动SMTP服务

在QQ邮箱的账户设置开启:SMTP服务

 再点击下面生成授权码。

  • 确定小程序云开发环境,并新建云函数

在新建的云函数处,右键点击--在外部终端打开

输入: npm install nodemailer  命令进行安装依赖。

  •  代码部分
// 云函数入口文件
const cloud = require('wx-server-sdk')
//引入发送邮件的类库
var nodemailer = require('nodemailer')

//云开发环境初始化
cloud.init({
    env: '你的云开发环境ID', //所对应的环境ID
    traceUser: true
})

// 创建一个SMTP客户端配置
var config = {
    host: 'smtp.qq.com', //网易163邮箱 smtp.163.com
    port: 465, //网易邮箱端口
    auth: {
        user: '你开启SMTP的邮箱', //邮箱账号
        pass: '点击生成的授权码' //邮箱的授权码
    }
};
// 创建一个SMTP客户端对象
var transporter = nodemailer.createTransport(config);
// 云函数入口函数
exports.main = async (event, context) => {
    // 创建一个邮件对象
    var mail = {
        // 发件人
        from: '移通校园跑腿儿 <yxhlhm@foxmail.com>',
        // 主题
        subject: '订单状态提醒',
        // 收件人
        to: '2109145872@qq.com',
        // 邮件内容,text或者html格式
        text: '被人接单啦,尽快回到小程序查看吧' //可以是链接,也可以是验证码
    };

    let res = await transporter.sendMail(mail);
    return res;
}

最后,上传并部署云函数即可:

  • 调用测试

wxml:

<button style="margin-top: 20px; width: 70%;" type="default" bindtap="clk1">点击发送邮件</button>

<button style="margin-top: 20px; width: 70%;" type="default" bindtap="clk2">点击发送短信</button>

js:

Page({

    clk1() {
        // 调用 云函数 发送 邮件
        wx.cloud.callFunction({
            name: 'send_email',
            success(res) {
                console.log("发送成功:", res)
            },
            fail(err) {
                console.log("失败:", err)
            }
        })
    },

    clk2() {
        // 调用 云函数 发送 短信
        wx.cloud.callFunction({
            name: 'send_message',
            success(res) {
                console.log("发送成功:", res)
            },
            fail(err) {
                console.log("失败:", err)
            }
        })
    },


})

结果:

目标手机:

 控制台:

 2、小程序实现发送短信

 这个我之前是在腾讯云申请的:登录 - 腾讯云https://console.cloud.tencent.com/smsv2

结果,因为我是用的云开发,可以直接在云开发控制台中申请短信服务的。

 如果直接在这里申请的话,个人会送100条,企业会送1000条。而且云开发调用它也很方便,但我后面才看到:

 腾讯云控制台:

 微信开发者工具中:

 新人才会免费增送额度 !!! 50块钱 可以买 1000 条短信额度。

直接用云开发+静态资源 发送短信简单些。而且发送的短信可以带链接,可以直接打开跳转到小程序。

还是先把免费的用了再说:先要有一个应用哈~

  • 确定应用

  • 确定签名  

  • 确定模板

  • 编写云函数-发送短信

我的云函数名称:send_message  ,右键它,点击在外部终端打开--输入以下命名 SDK 安装依赖:

npm install --save sms-node-sdk

代码:替换其中标注的内容即可

// 云函数入口文件
const cloud = require('wx-server-sdk')
const {
    SmsClient
} = require('sms-node-sdk');



const AppID = 666666; //你的SDK AppID  是1400开头
// 短信应用SDK AppKey ,替换为你本身的 AppKey
const AppKey = '666666';
// 须要发送短信的手机号码
const phoneNumber = '19115314436';
// 短信模板ID,须要在短信应用中申请
const templId = 666666;
// 签名,替换为你本身申请的签名
const smsSign = '移通校园跑腿儿';
// 实例化smsClient
//cloud.init()
//云开发环境初始化
cloud.init({
    env: 'cloud1-7g1a0u3je2bf6f8d', //你原开发所对应的环境ID
    traceUser: true
})
// 云函数入口函数
exports.main = async (event, context) => {
    let order_people = '自定义内容'; // 这个地方是 你创建模板 自定义内容的地方
    let smsClient = new SmsClient({
        AppID,
        AppKey
    });
    return await smsClient.init({
        action: 'SmsSingleSendTemplate',
        data: {
            nationCode: '86',
            phoneNumber,
            templId: templId,
            params: [order_people],
            sign: smsSign
            // 签名参数未提供或者为空时,会使用默认签名发送短信
        }
    })



}

你需要修改的东西在如下图:

 到这里,保存,上传部署云函数,就OK 了。

注意的是:短信它不允许 发送链接,发送也是携带固定的且备案的链接,这个是很严格的。

调用:控制台中

 目标手机中:

3、链接跳转小程序

腾讯云模板携带链接很麻烦,但后面云开发+静态资源是免鉴权直接跳转小程序端的,后面腾讯云免费额度用完了,我会选择云开发发送短信,所以就很有必要了解一下:链接跳转小程序。

官方文档:

  • 静态网站 H5 跳小程序 | 微信开放文档
  • 获取 URL Link | 微信开放文档

可知道:

  1. 使用云开发静态网站托管的网页,可以免鉴权跳转任意合法合规的小程序。即可以在微信内部浏览器的 H5 跳转小程序,也可以在微信外部浏览器或其他部分 App (如企业微信、QQ 等)跳转微信小程序。
  2. 只能生成已发布的小程序的 URL Link。
  3. 在微信内或者安卓手机打开 URL Link 时,默认会先跳转官方 H5 中间页,如果需要定制 H5 内容,可以使用云开发静态网站。
  • H5 配置

 修改:

点进去--记事本打开-- 搜索:<!-- replace --> 查看到所有需要替换的地方

 修改完成,保存。云开发后台上传 H5

 到这里就不用管了。

  • 获取小程序 URL Link,适用于短信、邮件、网页、微信内等拉起小程序的业务场景。通过该接口,可以选择生成到期失效和永久有效的小程序链接,有数量限制,目前仅针对国内非个人主体的小程序开放,详见获取 URL Link

还是自己要新建一个云函数哈

代码:

const cloud = require('wx-server-sdk')
//云开发环境初始化
cloud.init({
    env: 'cloud1-7g1a0u3je2bf6f8d', //你的云开发所对应的环境ID
    traceUser: true
})
exports.main = async (event, context) => {
    try {
        const result = await cloud.openapi.urllink.generate({
            "path": '/pages/get/get',
            "query": '',
            "isExpire": true,
            "expireType": 1,
            "expireInterval": 1,
            "envVersion": 'release',
            // "cloudBase": {
            //   "env": 'xxx',
            //   "domain": 'xxx.xx',
            //   "path": '/jump-wxa.html',
            //   "query": 'a=1&b=2'
            // }  
            // 不填就跳转 默认 H5 页面
        })
        return result
    } catch (err) {
        return err
    }
}

短信现在不能携带链接,我就在邮件中携带:微调一下,你们自己传个参数进去就可以

 效果:

拜~ 

下次再见~

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

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

相关文章

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)

目录 写在前面&#xff1a; 题目&#xff1a;P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …

Java进阶2 排序查找与Lambda、正则表达式

排序查找与Lambda、正则表达式● 导图一、 基础算法1.排序1.1 冒泡排序1.2 选择排序2. 查找2.1 基础查找2.2 二分查找二、Lambda表达式1&#xff09;初识Lambda2&#xff09;函数式编程3&#xff09;.Lambda表达式的标准格式4&#xff09;Lambda的注意事项5&#xff09;Lambda表…

k8s 1.18.20版本部署

身为k8s初学者&#xff0c;在掌握k8s理论知识的同时&#xff0c;也需要掌握一下实际部署k8s的过程&#xff0c;对于理论的学习起到一定的帮助作用。罗列了一下相关步骤&#xff0c;请各位参考&#xff1a; 一、环境准备 三台虚机&#xff1a; 操作系统&#xff1a; CentOS L…

【计算机组成原理 - 第二章】系统总线(完结)

本章参考王道考研相关课程&#xff1a; 【2019版】6.1.1 总线的概念与分类_哔哩哔哩_bilibili 【2019版】6.1.2 总线的性能指标_哔哩哔哩_bilibili 【2019版】6.2 总线仲裁_哔哩哔哩_bilibili 【2019版】6.3 总线操作和定时_哔哩哔哩_bilibili 【2019版】6.4 总线标准_哔哩哔哩…

Mac 和 Win,到底用哪个系统学编程?

今天来聊一个老生常谈的问题&#xff0c;学编程时到底选择什么操作系统&#xff1f;Mac、Windows&#xff0c;还是别的什么。。 作为一个每种操作系统都用过很多年的程序员&#xff0c;我会结合我自己的经历来给大家一些参考和建议。 接下来先分别聊聊每种操作系统的优点和不…

springCloud学习【2】之Nacnos配置管理Fegin远程调用gateway服务网关

文章目录前言一 Nacos配置管理1.1 统一配置管理1.1.1 nacos中添加配置文件1.1.2 从微服务拉取配置1.2 配置热更新1.2.1 方式一&#xff1a;添加注解RefreshScope1.2.2 方式二&#xff1a;使用ConfigurationProperties注解1.3 配置共享二 搭建Nacos集群2.1 集群结构图2.2 搭建集…

【函数】JavaScript 全栈体系(七)

JavaScript 基础 第十三章 函数 一、为什么需要函数 函数&#xff1a; function&#xff0c;是被设计为执行特定任务的代码块 说明&#xff1a; 函数可以把具有相同或相似逻辑的代码“包裹”起来&#xff0c;通过函数调用执行这些被“包裹”的代码逻辑&#xff0c;这么做…

cv2报错:Unsupported depth of input image

cv2 报错 error: OpenCV(4.6.0) /io/opencv/modules/imgproc/src/color.simd_helpers.hpp:94: error: (-2:Unspecified error) in function ‘cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [wit…

vue后台管理系统——添加i18n国际化功能——技能提升

昨天在写后台管理系统时&#xff0c;遇到一个需求就是需要实现国际化功能。 antd和element-ui这两个框架其实都是有国际化的。 具体展示形式就是如下&#xff1a; 点击右上角头部的语言&#xff0c;切换语言&#xff0c;然后整个系统的文字都改变成对应的语言展示。 切换成…

燕山大学-面向对象程序设计实验-实验7 多态性:函数与运算符重载-实验报告

CSDN的各位友友们你们好,今天千泽为大家带来的是燕山大学-面向对象程序设计实验-实验5 派生与继承&#xff1a;单重派生-实验报告,接下来让我们一起进入c的神奇小世界吧,相信看完你也能写出自己的 实验报告!本系列文章收录在专栏 燕山大学面向对象设计报告中 ,您可以在专栏中找…

【C语言进阶】内存函数

天生我材必有用&#xff0c;千金散尽还复来。 ——李白 目录 前言 一.memcpy函数 ​1.实现memcpy函数 2.模拟实现memcpy函数 二.memmove函数 1.实现memmove函数 2.模拟实现memmove函数 三.memcpy函数和memmove函数的关系 四.memcm…

2023金三银四--我们遇到的那些软件测试面试题【功能/接口/自动化/性能等等】

一、面试技巧题(主观题) 序号面试题1怎么能在技术没有那么合格的前提下给面试官留个好印象&#xff1f;2面试时&#xff0c;如何巧妙地避开不会的问题&#xff1f;面试遇到自己不会的问题如何机智的接话&#xff0c;化被动为主动&#xff1f;3对于了解程度的技能&#xff0c;被…

【Docker】什么是Docker?Docker的安装、加速

文章目录Docker出现的背景解决问题docker理念容器与虚拟机比较容器发展简史传统虚拟机技术容器虚拟化技术Docker安装官方网站安装前提Docker的基本组成镜像容器仓库Docker平台架构图解CentOS7安装Docker确定你是CentOS7及以上版本卸载旧版本yum安装gcc相关安装需要的软件包设置…

用 ChatGPT 辅助学好机器学习

文章目录一、前言二、主要内容&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 探索更高效的学习方法可能是有志者共同的追求&#xff0c;用好 ChatGPT&#xff0c;先行于未来。 作为一个人工智能大语言模型&#xff0c;ChatGPT 可以在帮助初…

Pandas 与 PySpark 强强联手,功能与速度齐飞

Pandas做数据处理可以说是yyds&#xff01;而它的缺点也是非常明显&#xff0c;Pandas 只能单机处理&#xff0c;它不能随数据量线性伸缩。例如&#xff0c;如果 pandas 试图读取的数据集大于一台机器的可用内存&#xff0c;则会因内存不足而失败。 另外 pandas 在处理大型数据…

Linux分文件编程:静态库与动态库的生成和使用

目录 一&#xff0c;Linux库引入之分文件编程 ① 简单说明 ② 分文件编程优点 ③ 操作逻辑 ④ 代码实现说明 二&#xff0c;Linux库的基本说明 三&#xff0c;Linux库之静态库的生成与使用 ① 静态库命名规则 ② 静态库制作步骤 ③ 静态库的使用 四&#xff0c;Linu…

django-celery-beat搭建定时任务

一、创建django项目和app 1、安装定时任务第三方包 pip install django-celery-beat # 插件用来动态配置定时任务,一般会配合 django_celery_results 一起使用&#xff0c;所以一起安装 django_celery_results pip install django_celery_results pip install eventlet # win…

Keil MDK6要来了,将嵌入式软件开发水平带到新高度,支持跨平台(2023-03-11)

注&#xff1a;这个是MDK6&#xff0c;不是MDK5 AC6&#xff0c;属于下一代MDK视频版&#xff1a; https://www.bilibili.com/video/BV16s4y157WF Keil MDK6要来了&#xff0c;将嵌入式软件开发水平带到新高度&#xff0c;支持跨平台一年一度的全球顶级嵌入式会展Embedded Wor…

操作系统(1.3)--习题

一、课堂习题 1、一个作业第一 次执行时用了5min ,而第二次执行时用了6min,这说明了操作系统的( )特点。 A、并发性 B、共享性 C、虚拟性 D、不确定性 D 2、在计算机系统中,操作系统是( )。 A、处于裸机之上的第一层软件 B、处于硬件之下的低层软件 C、处于应用软件之上的系统软…

对象的创建以及数组中常见的属性与方法

&#xff08;一&#xff09;对象创建的三种方法 1、利用对象字面量创建对象 const obj{ name:小开心 } 2、利用new Object创建对象 const obj1new Object({ name:小开心 }) 3、利用构造函数创建对象 构造函数&#xff1a;是一种特殊的函数&#xff0c;主要用来初始化对象&…