Node.js 邮箱验证 (nodemailer 模块)

  基于 nodemailer 实现自动发送邮件,最详细的教程,就怕你不会!


image.png

image.png

一、配置发送邮件的 js 文件

1、npm 安装 nodemailer

在终端中进入项目根目录

npm install nodemailer
2、获取 mtp 验证码(不想听我啰嗦的直接看图片即可)

发邮件需要发件人和收件人,在一般的项目中收件人是用户,发件人就是我们自己。
所有的邮件都是以我们的身份发出去的,既然要用代码实现发邮件的自动化,那我们就需要在发件人邮箱中开启一项支持我们自动发邮件的服务,同时获取一个代表我们已经开启这项服务的验证码(mtp 验证码)。
在这里我用的是我自己的QQ邮箱,具体操作如下:

image.png

image.png

滚动页面找到POP3/SMTP服务

image.png
image.png

得到之后一定要记住这个验证码,待会会用到
这里我的验证码是:cpeoiovq********

3、配置 nodemailer
  • 在创建mail.js文件
  • 配置发送邮件的请求对象(发件人)
const nodemailer = require('nodemailer');

//创建发送邮件的请求对象
let transporter = nodemailer.createTransport({
    host: 'smtp.qq.com',    //发送端邮箱类型(QQ邮箱)
    port: 465,      //端口号
    secure: true, 
    auth: {
        user: '7340*****@qq.com', // 发送方的邮箱地址(自己的)
        pass: 'cpeoiovq********' // mtp 验证码
    }
});

在这里需要注意如果你使用的是QQ邮箱,只需要将user里的邮箱地址改成你自己的,再将刚刚获得的mtp验证码填写在pass里即可。
如果你使用的不是QQ邮箱,你就需要修改一下hostport的内容,这里我为大家找了几个常用邮箱的hostport

"QQ": {
        "host": "smtp.qq.com",
        "port": 465,
        "secure": true
    },
"126": {
        "host": "smtp.126.com",
        "port": 465,
        "secure": true
    },

"163": {
        "host": "smtp.163.com",
        "port": 465,
        "secure": true
    }
  • 配置发送的邮件并封装为方法(发送的邮件)
function send(mail, code) {
    let mailObj = {
        from: '"邮件名称" <7340*****@qq.com>',   // 邮件名称和发件人邮箱地址
        to: mail,   //收件人邮箱地址(这里的mail是封装后方法的参数,代表收件人的邮箱地址)
        subject: '邮件标题',   //邮件标题
        text: '您的验证码是:'+ code, // 邮件内容,这里的code是这个方法的参数,代表要发送的验证码信息,这里的内容可以自定义
    }
    // 发送邮件(封装成一个promise对象),方便后面调用该方法
    //这部分代码直接复制粘贴即可,但是注意发送邮件的请求对象名称要和上面声明的名称保持一致(这里我的名称是transporter)
    return new Promise((resolve, reject)=>{
        transporter.sendMail(mailObj, (err, data) => {
            if(err){
                reject()    //出错
            }else{
                resolve()    //成功
            }
        })
    })
}
  • 抛出上面封装的send方法,以后需要发送邮件直接引入这个模块即可,我这里将send方法放在了对象里,大家也可以直接抛出,调用的注意一下就行
module.exports = { send }

下面是正常情况下 mail.js 文件里所有的代码,其实就是上面代码整理之后的文件,如果不想看我上面的啰嗦的那么多,直接来这里复制粘贴即可。

const nodemailer = require('nodemailer');

//创建发送邮件的请求对象
let transporter = nodemailer.createTransport({
    host: 'smtp.qq.com',    //发送端邮箱类型(QQ邮箱)
    port: 465,      //端口号
    secure: true, 
    auth: {
        user: '7340*****@qq.com', // 发送方的邮箱地址(自己的)
        pass: 'cpeoiovq********' // mtp 验证码
    }
});
function send(mail, code) {
    let mailObj = {
        from: '"邮件名称" <7340*****@qq.com>',   // 邮件名称和发件人邮箱地址
        to: mail,   //收件人邮箱地址(这里的mail是封装后方法的参数,代表收件人的邮箱地址)
        subject: '邮件标题',   //邮件标题
        text: '您的验证码是:'+ code, // 邮件内容,这里的code是这个方法的参数,代表要发送的验证码信息,这里的内容可以自定义
    }
    // 发送邮件(封装成一个promise对象),方便后面调用该方法
    //这部分代码直接复制粘贴即可,但是注意发送邮件的请求对象名称要和上面声明的名称保持一致(这里我的名称是transporter)
    return new Promise((resolve, reject)=>{
        transporter.sendMail(mailObj, (err, data) => {
            if(err){
                reject()    //出错
            }else{
                resolve()    //成功
            }
        })
    })
}
module.exports = { send }

二、使用 mail.js 发送邮件

  • 在你需要的 js 文件中引入上面抛出的模块
var Mail = require('./mail')    //注意 mail.js 文件的路径不要搞错了
  • 直接调用 send() 方法发送邮件 (注意需要传递的参数)
Mail.send('收件人的邮箱', '验证码')
  • 当然,为了确认邮件发送的状态,我们也可以配合上面封装的 promise 对象给用户返回信息(是否发送成功),直接复制粘贴即可
Mail.send('收件人的邮箱', '验证码')
        .then(() => {
            res.send({ err: 0, msg: '验证码发送 ok' })
        })
        .catch(() => {
            res.send({ err: -1, msg: '验证码发送 not ok' })
        })

下面是使用抛出的模块发送邮件的所有代码,就是上面几步代码的整理,如果不想看我上面的啰嗦的那么多,直接来这里复制粘贴即可。注意修改路径和参数

var Mail = require('./mail')    //注意 mail.js 文件的路径不要搞错了
Mail.send('收件人的邮箱', '验证码')
        .then(() => {
            res.send({ err: 0, msg: '验证码发送 ok' })
        })
        .catch(() => {
            res.send({ err: -1, msg: '验证码发送 not ok' })
        })
  • 终端运行该 js 文件,邮件发出


    image.png
成功收到邮件的截图
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258