欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > node.js 邮箱验证服务器搭建

node.js 邮箱验证服务器搭建

2025/5/15 3:39:49 来源:https://blog.csdn.net/Vone_66/article/details/147908079  浏览:    关键词:node.js 邮箱验证服务器搭建

node.js 邮箱验证服务器搭建

  • 安装node.js
  • 搭建环境
  • 邮箱验证服务器实现

安装node.js

网址:https://nodejs.org/en 直接安装

搭建环境

  1. 创建文件夹
    在这里插入图片描述
    2. 进入cmd界面
    在这里插入图片描述

  2. 创建node.js初始项目

    npm init
    

    在这里插入图片描述

  3. 安装所需依赖库

    # 安装grpc-js包
    npm install @grpc/grpc-js
    # 接着安装proto-loader用来动态解析proto文件
    npm install @grpc/proto-loader
    # 安装email处理的库
    npm install nodemailer
    npm install uuid
    

邮箱验证服务器实现

  1. 创建proto文件
    在这里插入图片描述
    内容如下:

    syntax = "proto3";
    package message;
    service VerifyService {rpc GetVerifyCode (GetVerifyReq) returns (GetVerifyRsp) {}
    }
    message GetVerifyReq {string email = 1;
    }
    message GetVerifyRsp {int32 error = 1;string email = 2;string code = 3;
    }
    
  2. 创建proto.js

    const path = require('path')
    const grpc = require('@grpc/grpc-js')
    const protoLoader = require('@grpc/proto-loader')
    const PROTO_PATH = path.join(__dirname, 'message.proto')
    const packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true })
    const protoDescriptor = grpc.loadPackageDefinition(packageDefinition)
    const message_proto = protoDescriptor.message
    module.exports = message_proto
    
  3. 邮箱设置smtp服务 (网易邮箱为例)
    在这里插入图片描述
    需记住授权密码:MU46MS2XiUgw4ytS

    在这里插入图片描述

  4. 创建config.json文件读取配置
    user 邮箱地址,pass授权码

    {"email": {"user": "ckun20191013@163.com","pass": "MU46MS2XiUgw4ytS"},"mysql": {"host": "localhost","user": "root","password": "123456","database": "test"},"redis": {"host": "localhost","port": "6379","password": "123456"}
    }
    
  5. 创建const.js文件定义全局变量和常量

    let code_prefix = "code_";
    const Errors = {Success : 0,RedisErr : 1,Exception : 2,
    };
    module.exports = {code_prefix,Errors}
    
  6. 创建config.js用来读取配置

    const fs = require('fs');
    let config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
    let email_user = config.email.user;
    let email_pass = config.email.pass;
    let mysql_host = config.mysql.host;
    let mysql_port = config.mysql.port;
    let redis_host = config.redis.host;
    let redis_port = config.redis.port;
    let redis_passwd = config.redis.passwd;
    let code_prefix = "code_";
    module.exports = {email_pass, email_user, mysql_host, mysql_port,redis_host, redis_port, redis_passwd, code_prefix}
    
  7. 创建email.js文件封装发邮件的模块

    const nodemailer = require('nodemailer');
    const config_module = require("./config")
    /*** 创建发送邮件的代理*/
    let transport = nodemailer.createTransport({host: 'smtp.163.com',port: 465,secure: true,auth: {user: config_module.email_user, // 发送方邮箱地址pass: config_module.email_pass // 邮箱授权码或者密码}
    });/*** 发送邮件的函数* @param {*} mailOptions_ 发送邮件的参数* @returns */
    function SendMail(mailOptions_){return new Promise(function(resolve, reject){transport.sendMail(mailOptions_, function(error, info){if (error) {console.log(error);reject(error);} else {console.log('邮件已成功发送:' + info.response);resolve(info.response)}});})
    }
    module.exports.SendMail = SendMail
    
  8. 创建server.js文件,用来启动grpc server

const grpc = require('@grpc/grpc-js')
const message_proto = require('./proto')
const emailModule = require("./email")
const const_module = require("./const")
const { v4: uuidv4 } = require('uuid');async function GetVerifyCode(call, callback) {console.log("email is ", call.request.email)try{uniqueId = uuidv4();console.log("uniqueId is ", uniqueId)let text_str =  '您的验证码为'+ uniqueId +'请三分钟内完成注册'//发送邮件let mailOptions = {from: 'ckun20191013@163.com',to: call.request.email,subject: '验证码',text: text_str,};let send_res = await emailModule.SendMail(mailOptions);console.log("send res is ", send_res)callback(null, { email:  call.request.email,error:const_module.Errors.Success}); }catch(error){console.log("catch error is ", error)callback(null, { email:  call.request.email,error:const_module.Errors.Exception}); }
}
function main() {var server = new grpc.Server()server.addService(message_proto.VerifyService.service, { GetVerifyCode: GetVerifyCode })server.bindAsync('0.0.0.0:40041', grpc.ServerCredentials.createInsecure(), () => {server.start()console.log('grpc server started')        })
}
main()
  1. 更改package.json

    {"name": "verifyserver","version": "1.0.0","main": "server.js","scripts": {"server": "node server.js"},"author": "","license": "ISC","description": "","dependencies": {"@grpc/grpc-js": "^1.13.3","@grpc/proto-loader": "^0.7.15","nodemailer": "^7.0.3"}
    }
    
  2. cmd 输入 npm run server
    在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词