# node发送邮件功能的实现
很多项目都会有登录功能,登录又分为短信验证码登录和邮箱验证码登录.两者都需要服务端发送随机验证码给客户端,今天我们来实现一个简单的发送邮件的功能吧
# 初始化项目
mkdir node-mail && cd $_
yarn init -y
首先,我们创建一个项目然后进入此项目,并且进行初始化操作
# 安装插件
yarn add nodemailer
安装插件,具体插件的详细说明看这里
# 编写代码
"use strict";
const nodemailer = require('nodemailer')
const fs = require('fs')
const path = require('path')
const transporter = nodemailer.createTransport({
service:'163', //使用的邮箱类型,全部类型可以查看官网
secureConnection:true, // 使用了SSL
auth:{
user:'zhangsan_test@163.com',
pass:'xxx', // 授权码,不是密码,一般可以通过发送短信验证码来获取,且只展示一次,记得保存好
}
})
let code = Math.random().toString().substr(2, 6) //随机生成6位验证码
let mailOptions = {
from:'zhangsan_test@163.com',
// to:'12345@qq.com', //邮件接收方,单个邮箱 字符串写法
to:['12345@qq.com','12346@qq.com'], //多个邮箱 数组写法
subject:'Hello this is zhangsan from zhejiang', //主题
text:`您的验证码是${code},验证码在10分钟内有效`, //正文内容,可以是text文本形式,也可以是一个html页面
// html:fs.createReadStream(path.resolve(__dirname,'index.html')), //引用一个html形式,可以在根目录创建一个html文件
attachments:[ //附件
{
filename:'1.png',
path:path.resolve(__dirname, 'images/1.png'),
cid:"01"
},
{
filename:'1.txt',
content:'Hello world !!!'
},
{
filename:'2.txt',
path:'./2.txt'
}
]
}
transporter.sendMail(mailOptions, (error, info) =>{
console.log({code})
if(error){
return console.log(error)
}
console.log(info)
})
注意: html里面是可以写样式的,内联样式和行内样式都是可以的.想要引用图片,若图片较小可以转为base64,图片较大则建议使用对象存储,引用cdn.
# 测试结果
在终端键入 node app.js
查看运行结果,若出现下面的日志,则证明我们的邮件已经发送成功了
{
accepted: [ '12345@qq.com', '12346@qq.com' ],
rejected: [],
envelopeTime: 726,
messageTime: 376,
messageSize: 381,
response: '250 Mail OK queued as smtp11,xxxx--.4S2 xxxxx',
envelope: {
from: 'zhangsan_test@163.com',
to: [ '12345@qq.com', '12346@qq.com' ]
},
messageId: '<xxx@163.com>'
}
自此,一个简单的发送邮件的功能就已经完成了.当然,想要运用到真正的业务当中,还需要很多额外的逻辑判断.比如限制发送频率等.