Vue+NodeJS实现邮件发送

这篇具有很好参考价值的文章主要介绍了Vue+NodeJS实现邮件发送。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.邮箱配置

这里以QQ邮箱为例,网易邮箱类似.

设置->账号

Vue+NodeJS实现邮件发送,vue.js,前端,javascript,node.js

Vue+NodeJS实现邮件发送,vue.js,前端,javascript,node.js

Vue+NodeJS实现邮件发送,vue.js,前端,javascript,node.js

二.后端服务搭建

index.js
const express = require('express')
const  router = require('./router'); 					
const app = express()

// 使用路由文件
app.use('/',router);

app.listen(3000, () => {
    console.log('server running ...');
})
router.js
const express = require('express');
const router = express.Router();
const {createSixNum,send}=require('./utils')

//发送邮件
  router.get('/getemail', async (req, res) => {
    try {
      const { mail } = req.query; //获取前端传过来的邮箱
  
      let code = createSixNum(); // 随机生成6位验证码
  
      send(mail, code)  //发送邮件的函数,传入邮箱和6位验证码
        .then(() => {
          res.json({ msg: '验证码发送成功' });
        })
        .catch((err) => {
          console.error(err);
          res.json({ msg: '验证码发送失败' });
        });
    } catch (error) {
      console.error(error);
      res.status(500).json({ message: '邮件发送失败' });
    }
  });
util.js

安装nodemailer

npm i nodemailer
const nodemailer = require('nodemailer')

 // 随机产生六位验证码
  function createSixNum() {
    let Num = "";
    for (var i = 0; i < 6; i++) {
      Num += Math.floor(Math.random() * 10);
    }
    return Num;
  }

// 创建一个SMTP客户端对象
let transporter = nodemailer.createTransport({
    host: "smtp.qq.com", // 发送方邮箱 qq 通过lib/wel-konw
    port: 465,
    secure: true, // true for 465, false for other ports
    auth: {
      user: '2580578725@qq.com', // 发送方邮箱地址
      pass:*****  // mtp 验证码 这个有了才可以发送邮件,可以qq邮箱去查看自己的码
    }
})


//发送邮件
function send(mail,code) {
    const mailContent = `
    <p>尊敬的用户:</p>
    <p>您好!</p>
    <p>***为您提供了以下验证码,用于完成您的操作:</p>
    <p><span style="font-weight: bold; color: #DC143C;">${code}</span></p>
    <p>请注意,此验证码的有效期为5分钟。</p>
    <p>感谢您的使用和支持!</p>
    <p>祝您一天愉快!</p>
    `;
    // 邮件信息
    let mailobj = {
      from: '<2580578725@qq.com>', // 发送方地址自定义
      to: mail, // 接收方地址
      subject: "注册验证码", // 主题内容
      html: mailContent // 使用html属性设置HTML内容
    }
    return new Promise((reslove, reject) => {
    // 发送邮件
      transporter.sendMail(mailobj, (err, data) => {
        if (err) {
          reject()
        } else {
          reslove()
        }
      })
    })
  }

module.exports = { createSixNum ,send}

 至此发送邮件的后端核心就完成了,接下来我们要将验证码缓存5分钟,给用户进行操作,过了5分钟,验证码会自动失效.

安装node-cache

npm i node-cache
router.js(全)
...
const NodeCache = require("node-cache");
const myCache = new NodeCache();

...
let code = createSixNum(); // 随机验证码
  
// 将code存入缓存
myCache.set("code", code, 300); // 缓存5分钟

send(mail, code)  //发送邮件的函数,传入邮箱和6位验证码
 .then(() => {
    res.json({ msg: '验证码发送成功' });
 })
 .catch((err) => {
   console.error(err);
   res.json({ msg: '验证码发送失败' });
});



至此后端的服务搭建完毕,我们可以配合登录或者注册来使用.假如是邮箱验证注册,我们在验证码缓存的时候,可以在注册的接口中获取验证码

myCache.get("code");

来与前端传过来的验证码进行比对,完成注册.如果比对成功可以用

myCache.del("code");

清空缓存,优化性能.

后面我会出一期完整的邮箱验证注册和登录模块.包括密码加密,JWT生成token,用户信息存储到数据库,Cookie实现无感登录和时效性.

三.Vue前端

由于是从项目中扣出来的,这里的axios请求我进行了封装,单个请求封装就有些多余.大家可以改改,能够将邮箱发过去就好了

axios封装
util.js
import axios from "axios";

const http = axios.create({
  baseURL: 'http://127.0.0.1:3000', // 注意这里的双斜杠
  timeout: 5000
});

// 请求拦截器
http.interceptors.request.use(config => {
  return config;
}, error => {
  return Promise.reject(error);
});

// 响应拦截器
http.interceptors.response.use(response => {
  return response.data;
}, error => {
  return Promise.reject(error);
});

export default http;
 api.js
import http from '@/utils/http';
//email
export async function getEmailAPI(mail) {

  const response = await http({
    url: 'getemail',
    method:'get',
    params: {mail}
  });

  return response; // 返回响应数据
 
}

这里我传的是params参数,如果你是axios.get('..',mail)... 后端记得修改为req.body

发送请求
import {getEmailAPI} from './api'
//邮件 
function sendemail(){  
//邮件正则
const qqEmailRegex = /^[1-9]\d{4,10}@qq\.com$/;
  if (qqEmailRegex.test(email.value)) {
    getEmailAPI(email.value) //email.value input的值
    .then(response=>{
      console.log(response)
    })
    .catch(error=>{
      console.log(error)
    })
  } else {
    console.log('邮件格式不正确')
  }

}

后续再加上冷却,多长时间才可以发下一封.以及进行下面的操作.

如果有不对或者优化的地方可以指正,如果使用时出现了问题,可以留言评论,大家一起解决!文章来源地址https://www.toymoban.com/news/detail-695999.html

到了这里,关于Vue+NodeJS实现邮件发送的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

    前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 实现代码如下: 使用方法 HTML代码实现部分 组件实现代码

    2024年02月11日
    浏览(14)
  • 前端js react vue怎么实现在线预览doc文档

    先说结论: 目前在纯前端层面没有很好的方案,基本都需要服务端的介入。 优点 :简单易用,无需配置 缺点 :文档需要支持外网访问,且文档会是公开可见的,所以对于一些内部敏感的文档来说,这个显然是不可行的。 需要后端介入配合 onlyoffice地址 这个也要先在服务器

    2024年02月15日
    浏览(26)
  • vue+face-api.js实现前端人脸识别功能

    近期做了一个前端vue实现人脸识别的功能,主要功能逻辑包含:人脸识别,人脸验证,唤起摄像头视频流之后从三个事件(用户点头、摇头、眨眼睛)中随机选中两个事件,待两个事件通过判断后人脸静止不动3秒钟后截取视频流生成图片,上传到阿里或者腾讯oss,通过oss返回

    2024年02月05日
    浏览(12)
  • IDEA运行前端vue项目,安装nodejs,以及配置

    我在刚接手到一个项目的时候,不知道前端的代码的情况下,想要写后端代码,遇到问题 所以需要看前台代码,着手IDEA  开始 安装nodejs (为什么要安装nodejs呢,首先就是说需要npm,  而nodejs 内置npm) 1.从官网下载 nodejs 2.然后下一步  下一步  傻瓜式安装 3.选择其他盘符如D盘或

    2024年01月25日
    浏览(19)
  • 基于vue.js前端+java后台购物商城系统设计与实现

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年04月14日
    浏览(15)
  • 使用JavaScript和Vue.js框架开发的电子商务网站,实现商品展示和购物车功能

    引言: 随着互联网的快速发展和智能手机的普及,电子商务行业正迎来一个全新的时代。越来越多的消费者选择网上购物,而不再局限于传统的实体店。这种趋势不仅仅是改变了消费者的习惯购物,也给企业带来了巨大的商机。为了不断满足消费者的需求,电子商务网站需要

    2024年02月15日
    浏览(24)
  • Vue前端 更具router.js 中的meta的roles实现路由卫士,实现权限判断。

    参考了之篇文章 1、我在登陆时获取到登录用户的角色名roles,并存入sessionStorage中,具体是在login页面实现,还是在menu页面实现都可以。在menu页面实现,可以显得登陆快一些。 2、编写router.js,注意,一个用户可能有多个角色。 这里有个bug 我们的roles存在sessionStorage中,关闭

    2024年02月13日
    浏览(14)
  • vue-codemirror实现一个前端代码在线编辑器,可处理 HTML,VUE,JS,CSS代码在线编辑

    先找个目录创建一个vue项目 例如 我们想要项目叫 editor 在终端执行 2和3其实都可以 但个人建议 最近还是2会更稳定一些 在终端执行 引入依赖包 然后在项目src目录下创建 utils 文件夹 里面创建一个setting.js 参考代码如下 然后 这边 调用组件的代码 因为项目也刚创 我直接写 s

    2024年02月15日
    浏览(16)
  • JavaScript - 判断当前时间是否在指定区间内,例如:9:00~12:00(检查当前时间是否处于规定的两个时间段范围内),适用于 vue.js / uniapp / 微信小程序等前端项目

    例如,您想知道当前时间是否处于 9:00 ~ 12:00 时间区间内,然后根据这个判断进而实现业务逻辑。 如下示例所示, 本文提供一个函数,您只需要传入 2 个时间区间,便可得出当前时间是否在该时间区间范围内: 您可以一键复制,直接粘贴到您的项目中。 您只需要传入开始时

    2024年02月16日
    浏览(19)
  • 【微服务部署】四、Jenkins一键打包部署NodeJS(Vue)前端项目步骤详解

      本文介绍使用Jenkins一键将NodeJS(Vue)前端项目打包并上传到生产环境服务器,这里使用的是直接打包静态页面,发送到远程服务器Nginx配置目录的方式,首先确保服务器环境配置好,安装Nginx,运行目录,日志存放目录等。 一、服务器环境配置   Nginx安装也有多种方式

    2024年02月10日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包