在春节来临之际使用 javascript + Node.js 实现邮件传输功能给远方的朋友发封邮件拜个早年
作者:互联网
目录:
一、引言
电子邮件,是互联网应用最广泛使用的服务之一,通过电子邮件系统,我们可以与世界上任何一个角落的网络用户进行联系。
在日常生说中,我们会常常看到一些网站有邮箱获取验证码验证注册、修改或者找回密码……等功能,目的是验证当前的用户确实是我们所声称的用户,也更是为了进一步保护用户的个人资料等信息,因为这个涉及到了隐私问题。近期,本人开发的个人博客项目—源码空间的找回密码功能,就需要用到邮件传输的功能,如下图所示:
那么问题来了,我们怎么实现邮件传输功能呢?不可能说又要学习其他的语言啥的吧,这个大家不用担心,在 Node.js环境下,已经给我们提供了许多邮件传输功能的第三方包,并且使用它们非常简单。那么今天我们使用Nodemailer
第三方包以及Node.js + Express
实现邮件传输功能。
二、Nodemailer 模块
1、简介
Nodemailer 是 Node.js 应用程序的一个第三方模块,可以方便地实现发送电子邮件的功能。
Github项目地址为:https://github.com/andris9/Nodemailer。
该项目于 2010 年开始,至今已经相当稳定,这也是如今大多数 Node.js 用户默认情况下发送邮件的解决方案。
2、特点
- 支持Unicode编码
- 支持Window系统环境
- 支持HTML内容和普通文本内容
- 支持附件(传送大附件)
- 支持HTML内容中嵌入图片
- 支持SSL/STARTTLS安全的邮件发送
- 支持内置的transport方法和其他插件实现的transport方法
- 支持自定义插件处理消息
- 支持XOAUTH2登录验证
3、使用
- 导入 Nodemailer 模块
npm install nodemailer
- 创建可重复使用的传输器对象
// 格式:
let transporter = nodemailer.createTransport(transport[, defaults]);
/*
参数说明
transporter(传输器对象): 是一个能够发送邮件的对象
transport(传输): 是传输配置对象、连接 URL 或传输插件实例,对象类型,对传输器的配置
defaults(默认):是定义邮件选项的默认值的对象
*/
let transporter =nodemailer.createTransport({
host: "smtp.163.com",// 主机:以什么邮箱格式发送:我这里用的是163邮箱,当然如果是qq邮箱,则将163换成qq即可
secureConnection: true,//使用了SSL,安全方式发送,建议都加
port: 465, //端口:SMTP端口
// 身份验证
auth: {
// 上面的host选项是什么格式的邮箱,就使用什么邮箱
user: "inlett_wang@163.com", //你的邮箱
pass: "***********" //邮箱授权码,并非是你的邮箱密码
}
});
如何获取授权码,请参考以下链接:
- 163邮箱获取授权码:https://jingyan.baidu.com/article/495ba841ecc72c38b30ede38.html
- qq邮箱获取授权码:https://jingyan.baidu.com/article/90895e0f2af42664ec6b0b14.html
- 配置 SMTP 信封
//设置邮箱的选项
const options = {
from: '"源码空间" <inlett_wang@163.com>', //自己的邮箱
to: req.params.uemail, //要发送的邮箱
subject: "源码空间验证码", //设置主题
html: "验证码为:<h4>54321</h4>60秒内有效",//可发送带有html标签的数据
text:"验证码为:54321,60秒内有效",//可发送文本的数据
// 可携带附件(多个)
attachments :
[
{
filename: 'img1.png', // 改成你的附件名
path: 'public/images/img1.png', // 改成你的附件路径
cid : '00000001' // cid可被邮件使用
},
{
filename: 'img2.png', // 改成你的附件名
path: 'public/images/img2.png', // 改成你的附件路径
cid : '00000002' // cid可被邮件使用
},
]
};
- 发送邮件
// 格式:
传输器对象.sendMail(SMTP配置, function(err, info) {
代码块...
});
transporter.sendMail(options, function(err, info) {
// 如果发送出现异常
if (err) {
// 打印异常信息,并停止该函数
return console.log(err);
}
console.log('发送成功');
});
三、可重用的邮件发送模块(以服务器挂载路由函数为例)
- 创建一个根目录,并在根目录中初始化一个配置文件
npm init -y
- 在根目录下切换到终端中,导入
express
模块 和nodemailer
模块
npm install express nodemailer
- 在根目录下创建一个
app.js
文件作为服务器
const express = require("express");
const sendMail = require("./sendMail");
const app = express();
app.get("/sendMail", (req, res) => {
sendMail.sendEmail("源码空间", "2840250928@qq.com", "光明顶团队祝愿全国人民新春快乐!", "<h4>春节将至,愿你背上幸福的行囊,带上开心的思念果,跨上快乐号的列车,把一年的劳累遗忘,一年的疲惫甩开,轻松快乐归家,平安按时到达。无忧考网搜集的《2021给领导拜年短信祝福语》,供大家参考阅读,更多内容 ,请访问祝福语频道。</h4>");
// 因为上述方法中包含异步事件,所有我们如果使用同步的方法则获取不到返回的值,所有我们要使用定时器来获取返回的值
setTimeout(() => {
// 如果返回的是null
if (sendMail.error === null) {
res.send({
status: 1,
msg: "邮件发送失败!"
});
}
// 否则
res.send({
status: 0,
msg: "邮件发送成功!"
});
}, 1000);
});
app.listen(8080, "127.0.0.1", () => {
console.log("服务器开启成功!");
});
- 在根目录下创建
sendMail.js
文件作为可重用的邮件传输模块
// 导入nodemailer模块
const nodemailer = require("nodemailer");
// 发送方的邮箱
const myEmailer = "inlett_wang@163.com";
// 创建可重复使用的邮件传输器
const transporter = nodemailer.createTransport({
host: "smtp.163.com", //邮箱格式
secureConnection: true, //使用了 SSL
port: 465, //SMTP端口
// 配置邮箱选项
auth: {
user: myEmailer, //你的邮箱
pass: "*********" //邮箱授权码,并非邮箱密码
}
});
// 创建发送邮箱的函数
module.exports.sendEmail = function(title, toEmail, subject, html = null, text = null, attachments = null) {
// 配置SMTP信封
const options = {
from: `"${title}" <${myEmailer}>`, //发送方的邮箱
to: toEmail, //接收方的邮箱
subject: subject, //邮箱主题
html: html ? html : "", //判断html参数是否存在,存在即发送,否则为空字符串
text: text ? text : "", //判断text参数是否存在,存在即发送,否则为空字符串
attachments: attachments ? attachments : "" //判断附件是否存在,存在即发送,否则为空字符串
};
// 发送邮箱
transporter.sendMail(options, (err, info) => {
// 判断是出现异常
if (err) {
// 出现异常则将异常对象存储
module.exports.error = err;
}
// 无异常则存储null
module.exports.error = null;
});
};
注意:当在路由模块、路由处理函数模块、或者app服务器模块下想要使用邮件传输功能,那么就可以使用以上步骤三的sendMail模块拿过来配置后直接使用,并在使用的地方调用函数即可。
四、总结
以上基本上就是在Node.js
环境下使用nodemailer
第三方包实现邮件传输功能的基本使用方法,当然还有其他的办法实现邮件传输,下期我们介绍其他的方法。
如果本篇文章有哪里写的不对的地方,还请各位朋友多多指点,当前有喜欢或者想学习Node.js或者js脚本的朋友也可以私信哦!在这里先给各位朋友拜个早年,祝各位朋友新年快乐,事业顺利,学业有成!
标签:Node,sendMail,nodemailer,javascript,发送,模块,邮箱,邮件 来源: https://blog.csdn.net/abraham_ly/article/details/113774560