node构建自己的API服务器系列五:邮件发送服务

原创 Dean 程序相关,系列文章 二维码阅读
2018-10-09 21:48

在前三节中,我们介绍了API服务基础环境的搭建并基于此实现了三个比较简单的服务和一个稍微复杂点的快递单识别服务,本节我们将构建一个简单的邮件发送服务。

发送邮件,算是一个很常用的功能了,很多提醒,通知,注册确认等都会选择以邮件的形式发送,网上也有很多现成的服务,但抱着学习的心态,我们可能还是想自己简单的做一个。使用node作为编程语言,在不调用现成服务的情况下,我想到了两个方案,一个是用node调用系统的mail命令来发送邮件,这个实现起来也算比较简单,但中间可能有坑,还有一个就是调用node的第三方库nodemailer来实现,简单易用且功能强大,下面我们详细了解下nodemailer。

什么是nodemailer?

Nodemailer是一个简单易用的Node.js邮件发送组件

官网地址:https://nodemailer.com

GitHub地址:https://github.com/nodemailer/nodemailer

Nodemailer的主要特点包括:

1、支持Unicode编码

2、支持Window系统环境

3、支持HTML内容和普通文本内容

4、支持附件(传送大附件)

5、支持HTML内容中嵌入图片

6、支持SSL/STARTTLS安全的邮件发送

7、支持内置的transport方法和其他插件实现的transport方法

8、支持自定义插件处理消息

9、支持XOAUTH2登录验证

如何安装?

首先我们需要确认本地Node版本为v6+,通过在命令行运行

npm i nodemailer --save

安装完成后, 我们先创建邮件发送的配置文件,在config目录下创建mailConfig.js,添加配置:

module.exports = {
	user: '账号',
	pass: '密码',
	host: 'smtp.qq.com',
	port: 465,
	secure: true
};

接着我们可以开始编写用于发送邮件的工具方法mail.js了,代码如下:

const mailer = require('nodemailer');

const config = require('../config/mailConfig');

const transport = mailer.createTransport({
    host: config.host,
    port: config.port,
    secure: config.secure || false, 
    auth: {
        user: config.user, 
        pass: config.pass 
    }
});

function sendMail(receiver, subject, content) {
	return new Promise((resolve, reject) => {
	    const mailOptions = {
	        from: config.user,
	        to: receiver,
	        subject,
	        html: content // html body
	    };
	    transport.sendMail(mailOptions, (err, info) => {
	    	if (err) {
	    		reject();
	    	} else {
	    		resolve(info);
	    	}
	    });
	});
}

module.exports = sendMail;

然后按照惯例先规划路由:

/send-mail 接受收件人,邮件内容等消息并发送,需要用POST方式

在routes目录下创建路由处理器sendMail.js,编写代码:

const express = require('express');
const router = express.Router();

const { setHeader, setJSONResponse } = require('../utils/res');
const sendMail = require('../utils/mail');

router.post('/', function(req, res, next) {
	const { receiver, subject, content } = req.body;
	setHeader(res, 'content-type', 'application/json;charset=utf-8');
	setHeader(res, 'Access-Control-Allow-Origin', '*');
	sendMail(receiver, subject, content)
		.then(info => {
			setJSONResponse(res, {
				ret: 0
			});
		})
		.catch(err => {
			setJSONResponse(res, {
				ret: -1
			});
		});
});

module.exports = router;

最后在入口文件app.js中建立路由映射关系:

app.use('/send-mail', sendMailHandler);

在命令行运行命令启动API服务器

node app.js

然后可用postman向http://127.0.0.1:1314/send-mail发出post请求,以formData传递receiver, subject, content参数,就可以使用邮件发送服务了。

当然,我们只是使用了nodemailer一点点小功能而已,我们能实现的功能还有很多,比如批量发送、插入附件等等,你可以点击这里查看nodemailer发送邮件的更多配置项。

如需源码下载,请点击这里

系列文章导航:

第一节:node构建自己的API服务器系列一:日志服务

第二节:node构建自己的API服务器系列二:IP解析服务

第三节:node构建自己的API服务器系列三:代理服务

第四节:node构建自己的API服务器系列四:快递单识别服务

本文地址:https://www.deanhan.cn/node-api-server-series-5.html
版权声明:本文为原创文章,版权归 Dean 所有,欢迎分享本文,转载请保留出处!
  • 支付宝二维码 支付宝
  • 微信二维码 微信