koa发送验证码至邮箱,QQ邮箱发送

提示:koa发送验证码至邮箱,QQ邮箱发送

文章目录

  • 前言
  • 一、依赖和邮箱设置
  • 二、使用步骤
    • 1.vue中Login.vue
    • 2.vue中axios.js
    • 3.koa中routes.js
    • 4.koa中emailCode.js
    • 5.koa中app.js
  • 总结


前言

koa发送验证码至邮箱,QQ邮箱发送

一、依赖和邮箱设置

npm install nodemailer --save
在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.vue中Login.vue

代码如下(示例):

<template><div class="login_box"><div class="login_list"><el-form:model="user"status-icon:rules="rules"ref="loginForm"label-width="80px"class="login_orm"><el-form-item label="邮箱" v-if="loginType='regist'" prop="email" class="login_list_item"><el-inputv-model="user.email"autocomplete="off"></el-input></el-form-item><el-form-item v-if="loginType='regist'" label="邮箱验证码" prop="code" class="login_list_item"><div class="login_item"><el-input v-model.number="user.emailCode"></el-input><el-button type="primary" :disabled="disabledEmailCode" @click="getEmailCode" round>{{!disabledEmailCode?'获取验证码':countNum+'s'}}</el-button></div></el-form-item></el-form></div></div>
</template><script>
import { regist,getPhoneCode, getImgCode, getEmailCode } from "@/axios/index";export default {name: "Login",data() {var validateEmail = (rule, value, callback) => {if (value === "") {callback(new Error("请输入邮箱"));} else {if(value != ""){if(!this.emailReg.test(value)){callback(new Error("请输入正确的邮箱"));return}}callback();}};var validateEmailCode = (rule, value, callback) => {if (value === "") {callback(new Error("请输入验证码"));} else {callback();}};return {imgUrl: null,msg: "用户注册",loginType: "regist",imgCodeUrl:null,disabledPhoneCode:false,disabledEmailCode:false,countNum:60,countTimer:null,emailReg:/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,user: {email: "",emailCode:"",},rules: {email: [{required: false},{ validator: validateEmail, trigger: "blur" }],emailCode: [{required: false},{ validator: validateEmailCode, trigger: "blur" }],},};},created(){},methods: {getEmailCode(){if(!this.emailReg.test(this.user.email)&&this.user.email!=''){this.$message.error();('请输入正确的邮箱');return}getEmailCode({email:this.user.email}).then(()=>{this.$message.success();('验证码已发送邮箱');})},},
};
</script>
<style scoped lang="scss">
.login_box {position: relative;height: 100%;.login_list {width: 400px;position: absolute;box-sizing: border-box;top: 50%;left: 50%;transform: translate(-50%, -50%);.login_title {font-size: 16px;text-align: center;}.login_item{display: flex;.el-button.is-round{padding: 0 14px;margin-left: 30px;height: 26px;position: relative;top: 8px;}.login_item_img{height: 40px;width: 160px;margin-left: 30px;}}}
}
</style>
<style>.login_box .login_list .el-form-item__label{text-align: justify;height: 40px;overflow: hidden;
}
.login_box .login_list .el-form-item__label::after{content: "";display: inline-block;width: 100%;height: 100%;
}
</style>

2.vue中axios.js

代码如下(示例):

import axios from 'axios';
import { Loading, Message } from 'element-ui';let urlData = { basicUrl: "http://127.0.0.1:3002" }let loading;const instance = axios.create({baseURL: urlData.basicUrl,timeout: 1000,headers: { "X-Requested-With": "XMLHttpRequest" },withCredentials: false,
});// 添加请求拦截器
instance.interceptors.request.use(function (config) {// 在发送请求之前做些什么loading = Loading.service({lock: true, // 是否锁屏text: '正在加载...', // 加载动画的文字spinner: 'el-icon-loading', // 引入的loading图标background: 'rgba(0, 0, 0, 0.3)', // 背景颜色})return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});// 添加响应拦截器
instance.interceptors.response.use(function (response) {loading.close();// 对响应数据做点什么return response.data;
}, function (error) {// 对响应错误做点什么return Promise.reject(error);
});export const getImgCode = async () => {return instance.get('/getImgCode');
}export default instance;

3.koa中routes.js

代码如下(示例):

import Router from 'koa-router';
import fs, { readFileSync } from 'fs';
import { sendEmail } from './emaiCode.js'const router = new Router();const getEmailCode = async ctx => {let codeStr = "";  //验证码let codeLen = 6;   //验证码长度for(let i=0;i<codeLen;i++){codeStr += Math.floor(Math.random()*10);}var mail = {from: `""<xxx@xx.xxx>`,       //发件邮箱subject: "验证码",to: ctx.request.body.email,   //收件邮箱text: "验证码为:" + codeStr, //发送内容};const res = await sendEmail(mail);ctx.session.emailCode = codeStr;ctx.session.emailCodeTime = new Date().getTime();ctx.body = {code: 200,data: res.info,msg: 'success'}}
router.post('/getEmailCode ',getEmailCode );export default router;

4.koa中emailCode.js

代码如下(示例):

import Nodemailer from 'nodemailer'
const config = {host: "smtp.qq.com",port: 465,secureConnection: true,service: "qq",auth: {user: "xxx@xxx.xxx",    //发件账号pass: "xxxxxxxxxx",     //发件邮箱授权码},
};
const transport = Nodemailer.createTransport(config);export const sendEmail = async (mail) => {let res = {};let start_time = new Date().getTime();return new Promise((resolve,reject)=>{transport.sendMail(mail, (err, info) => {res.err = err;res.info = info;console.log(new Date().getTime() - start_time,"ms")resolve(res);});})
}

5.koa中app.js

代码如下(示例):

import koa from 'koa';
import cors  from 'koa-cors';
import router from './routes/routes.js';
import staticFiles from 'koa-static';
import koaBody from 'koa-body';
import session from 'koa-session'import path from 'path';const __dirname = path.resolve();
const app = new koa();app.use(cors({ // 指定一个或多个可以跨域的域名origin: function (ctx) { // 设置允许来自指定域名请求if (ctx.url === '/') {return "*"; // 允许来自所有域名请求, 这个不管用}// return 'http://localhost:8000'; // 这样就能只允许 http://localhost:8000 这个域名的请求了return '*'; // 这样就能只允许 http://localhost:8000 这个域名的请求了},maxAge: 5, // 指定本次预检请求的有效期,单位为秒。credentials: true,  // 是否允许发送CookieallowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],  // 设置所允许的HTTP请求方法allowHeaders: ['Content-Type', 'Authorization', 'Accept'],  // 设置服务器支持的所有头信息字段exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] // 设置获取其他自定义字段
}))const sessionConfig = {key: 'koa:sess',   // cookie的key,默认koa:sessmaxAge: 1000*5,    // 过期时间,毫秒msautoCommit: true,  // 提交到响应头overwrite: true,   // 重写httpOnly: true,    // 无法获得Cookie信息signed: true,      // 签名rolling: true,     // 每次刷新renew: false,      // 快过期刷新
};
app.keys = ["long long age"];          // signed签名key
app.use(session(sessionConfig, app));  //第二个参数是app ----------------//解析formdata过来的数据
app.use(koaBody({ multipart: true,formidable: {//上传文件存储目录uploadDir:  path.join(__dirname, `/public/uploads/`),//允许保留后缀名keepExtensions: true,multipart: true,},jsonLimit:'10mb',formLimit:'10mb',textLimit:'10mb'
})); 
app.use(router.routes());
app.use(router.allowedMethods());
app.use(staticFiles(__dirname + '/public'));
app.listen('3002');
console.log("项目启动,访问:","localhost:3002");

总结

踩坑路漫漫长@~@

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音APP接口分析

抖音搜索接口 接口名类型链接搜索用户综合信息posthttps://aweme-hl.snssdk.com/aweme/v1/challenge/search/?搜索相关用户列表posthttps://search-hl.amemv.com/aweme/v1/discover/search/?搜索相关话题列表posthttps://search-hl.amemv.com/aweme/v1/challenge/search/? …

征集即将截止,《中国AIGC产业全景报告暨AIGC 50》邀你共同参与!

随着ChatGPT火爆&#xff0c;AIGC——AI生成内容&#xff0c;热度被推向了最高潮。 短短两个月内&#xff0c;ChatGPT频频刷屏&#xff0c;霸占舆论热点。不仅在多个场景上效果惊人&#xff0c;还实现了最快达到一亿月活&#xff0c;疯狂拉升各个相关技术和概念公司的品牌、股价…

【历史上的今天】8 月 29 日:Wolfram 语言之父、“新”科学家 Stephen Wolfram 的诞生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 8 月 29 日&#xff0c;2014 年的今天&#xff0c;电影《模仿游戏》在美国的特柳赖德电影节全球首映&#xff0c;将“计算机科学之父”艾伦图灵的传奇人生带到…

猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。

美国数学家维纳(N.Wiener)智力早熟&#xff0c;11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次&#xff0c;他参加某个重要会议&#xff0c;年轻的脸孔引人注目。于是有人询问他的年龄&#xff0c;他回答说&#xff1a; “我年龄的立方是个4位数。我年龄的4次…

图灵奖获得者杰克·唐加拉:ChatGPT并非“超算大脑”,量子芯片或引领行业跨越式飞跃...

来源&#xff1a;数据观 现任美国田纳西大学电气工程和计算机科学系教授的杰克唐加拉&#xff08;Jack J. Dongarra&#xff09;&#xff0c;既是美国国家工程院院士&#xff0c;又是英国皇家学会外籍院士。他是超级计算机基准测试、数值分析、线性代数解算器和高性能计算领域的…

数学家排行榜:高斯和黎曼谁才是近现代最伟大的数学家?

第一&#xff1a;牛顿&#xff0c;高斯&#xff0c;欧拉&#xff0c;阿基米德 第二&#xff1a;柯西&#xff0c;庞加莱&#xff0c;康托尔&#xff0c;凯莱&#xff0c;哈密尔顿&#xff0c;黎曼&#xff0c;爱森斯坦&#xff0c;帕斯卡 第三&#xff1a;伽罗瓦&#xff0c;阿…

中国著名的数学家

一、丘成桐 丘成桐教授&#xff08;1949.4.4.~现在&#xff09; 国际著名数学家&#xff0c;20世纪国际著名华人数学家陈省身老先生的学生&#xff0c;现担任美国科学院院士、中国科学院外籍院士、俄罗斯科学院外籍院士、意大利Lincei 科学院外籍院士、台湾中央研究院院士、…

顶级数学家到底有多厉害?

数学是我的全部生活。 ——哈代 01 哈代 哈代&#xff08;Hardy&#xff0c;Godfrey Harold&#xff0c;1877年2月7日&#xff5e;1947年12月1日&#xff09;&#xff0c;卒于剑桥。13岁进入以培养数学家著称的温切斯特学院。23岁在剑桥获得职位。同年得史密斯奖。 在20世纪上半…

微软官方确认新浏览器Edge不再支持Silverlight

微软的新浏览器Edge一直广受关注&#xff0c;这次Windows 10大招背后的每一个技术细节都体现了微软的态度。日前&#xff0c;微软在官网声称&#xff0c;Edge将不再支持ActiveX&#xff0c;同时也移除了对Silverlight的支持。放弃ActiveX也意味着Edge浏览器将不会支持公司自己的…

关于Office 365开发者订阅无法注册的说明

自发布Office 365开发者订阅的消息已经有一段时间了&#xff0c;在这段时间里不时有收到网友的反馈&#xff0c;说收不到验证码&#xff0c;开始的时候没太在意&#xff0c;认为可能是个别手机运营商的问题&#xff0c;但是一直持续地收到这样的反馈&#xff0c;所以我决定看看…

微软明年停止支持IE浏览器 鼓励使用Edge浏览器

微软在其官方社区宣布自今年 11 月 30 日起&#xff0c;Microsoft Teams Web 应用将逐步停止对IE11的支持&#xff1b;从 2021 年 8 月 17 日起&#xff0c;IE 11 浏览器将不再支持微软旗下包括Office365&#xff0c;OneDrive 云盘&#xff0c;Outlook 邮箱等办公软件服务。微软…

微软为新Edge向停止支持的Windows 7推送更新

导读Windows 7 已经停止支持了&#xff0c;但是微软突然又向这个系统推送了更新&#xff0c;这是为什么呢&#xff1f; 微软在近期补丁日向 Windows 10 用户推送基于 Chromium 的新 Edge&#xff0c;但事实证明&#xff0c;微软也借此机会向已经停止支持的 Windows 7 操作系统推…

微软商店中的WSL预览版现已可用!Windows 11用户狂喜

整理 | 祝涛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 微软官方今天宣布&#xff0c;Windows Subsystem for Linux (简称WSL) 作为应用程序在微软商店中普遍提供给 Windows 11 PC。 WSL 预览版登陆微软商店将给用户带来巨大的便利&#xff1a;用户可以更快…

关闭微软Edge浏览器的“使用推荐的浏览器设置”弹窗

Edge确实用得很顺手&#xff0c;但是不知道从哪个版本开始&#xff0c;就会有一定几率出现这样的弹窗&#xff1a; ”使用推荐的浏览器设置“…… 简直太影响使用了。 而且更要命的是&#xff0c;点“忽略”之后&#xff0c;隔一段时间又会弹出来&#xff0c;跟牛皮癣没啥区别…

微软 Edge 浏览器出现无法关闭的广告

昨日 Edge 浏览器新标签页下方出现无法关闭的广告模块&#xff0c;有网友测试发现Class 部分写有“China”字样&#xff0c;猜测可能是国内特供版本。 据微软官方社区&#xff0c;微软中文社区领袖高楷修 (Ling Gao) 发文&#xff0c;微软 Edge&#xff08;中国&#xff09;工…

记录edge浏览器无法登录微软账户的修复过程

问题是这样的&#xff0c;因为自己在edge浏览器上有很多分组和网页收藏&#xff0c;需要登录微软账户才能同步&#xff0c;但新电脑点登录是这样的。 自己在网上搜索尝试过的方法&#xff1a; 换个网络&#xff1a;用手机热点链接尝试 尝试用office切换登录 重置edge浏览器设…

WIN10 LTSC 安装EDGE和微软应用商店

RyanKONG&#xff0c;假正经的产品经理、摄影师、程序员、设计师、创业者。 关于LTSC版本Why&#xff1f;那些人适合安装 Lets Go&#xff01;&#xff01;&#xff01;安装Edge安装微软应用商店个人使用的微软应用推荐 关于LTSC版本 Why&#xff1f; 干净啊&#xff0c;没有…

edge浏览器无法登录账号!Microsoft 帐户无法登录!

种种原因&#xff0c;将笔记本重置了&#xff0c;重新下载装了系统&#xff0c;但是麻烦也来了&#xff0c;Microsoft 帐户无法登录&#xff01;edge浏览器无法登录账号&#xff0c;之前的保存的密码&#xff0c;加星的书签页同步不过去&#xff0c;这不完犊子了&#xff01;干…

修复Edge浏览器无法登录微软账户问题

问题描述 之前重装系统后默认的Edge浏览器需要重新登录微软账号&#xff0c;在账户密码正确的情况下&#xff0c;笔者无论登录多少次都无法登录成功。每次都会卡在请稍等的页面&#xff0c;如下图所示 原因 查阅网上的方案&#xff0c;大抵推测是登录无法访问微软服务器地址完…

Edge浏览器无法登录Microsoft账户

Edge浏览器无法登录Microsoft账户 一直用 chrome浏览器&#xff0c;但是同步不了收藏&#xff0c;即便可以设置起来也比较麻烦。于是我就改用了Microsoft Edge浏览器&#xff0c;但在登录Microsoft 账户时&#xff0c;无法登录账号&#xff0c;一直卡在“请等候”这个页面。 网…