一、项目简介

一个可以本地启动的邮件服务器,支持可视化界面的邮件发送。技术栈使用 express + nodemailer + jade,开发完成之后又加入了自动化测试(接口测试),测试框架使用mocha,断言库should.js。


如何使用nodemailer发送qq邮件_邮件发送

二、项目背景

故事要从三年前说起,当时刚刚在github完成了我的 GitHub page 首页,其中有一个connect模块,需要实现一个简单的留言功能。当时能想到的两种方案:

  1. 买服务器、搭数据库、实现留言管理
  2. 直接留言内容转化为邮件发送到我的邮箱

综合考虑最终选择方案2,毕竟留言无需回显而且方案2的成本低了很多。

花了一晚上时间研究了几大厂商的邮件包,也在github上研究了相关解决方案,发现可以直接用node自己搭建一个邮件服务器,于是我的第二个开源项目闪亮登场,正式开始开发。

三、实践过程

GitHub first commit 2018-5-7

1. 第一阶段:实现邮件发送api
  • 邮箱开通 SMTP 协议(建议想要实操的小伙伴去申请一个新的邮箱,开放 SMTP 服务支持,配置过程不再敖述)
  • 使用 express 实现邮件发送接口

这个阶段完成的标志就是能够在启动服务之后通过postman设定好参数调用到这个接口并且成功发送邮件。

2. 第二阶段:UI部分完成

页面部分没什么好说的,就是一个简单的响应式布局form表单,整体使用了H5页面原生的表单验证。


如何使用nodemailer发送qq邮件_项目复盘_02

页面渲染时因为 express 接口url和页面路由同时使用出现了冲突,选择使用了服务端渲染处理这个问题,当然这里的渲染并没有用到过多的页面变量,直接返回了 html 页面。

来个最简单的demo示例

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

router.get('/', (req, res, next) => {
  res.render('submit/index.html')
})

完成标志是可以通过页面输入发送邮件,到这里项目已经完成一大半了。

3. 第三阶段:自动化测试完成

刚好之前有用过 mocha 自动化测试,但还没有自己动手搭过环境,刚好这次有机会自己动手,环境搭建过程整体难度不高,完后顺便用 istanbul 检测了测试覆盖率,也根据结果完善了几条测试用例。

目前 istanbul 测试的覆盖率情况如图:


如何使用nodemailer发送qq邮件_项目复盘_03

对测试覆盖率感兴趣的小伙伴推荐阮一峰老师的代码覆盖率工具 Istanbul 入门教程

再推荐一款好看的github徽章,在写完自动化测试用例后可以在https://coveralls.io/这个网站获取样式如下。

如何使用nodemailer发送qq邮件_项目复盘_04

4. 第四阶段:混淆加密默认邮箱相关信息

首先介绍下,SMTP(Simple Mail Transfer Protocol)是发送邮件的协议,可以发送纯文本邮件、HTML邮件以及带附件的邮件。一般邮箱会默认关闭SMTP服务,开启了这个服务你就可以用这个邮箱及对应的授权码自动发送邮件,授权码一般是用于登录第三方客户端的专用密码。

简单来说,你要想找个人帮你发邮件,但你又不想让他登录你的邮箱看到你之前收发的邮件历史内容,这时就需要一个授权码,让他仅仅拿到帮你发邮件的授权

混淆加密(终于说到正题了)实际加密的就是配置的邮件相关信息,这里的混淆加密说白了就是将代码改成不可读的形态。当然后来也想到了解密的方法,这里就不自曝了……

更多详细信息可以查看项目的readme.md

四、总结思考

只为自己而造的轮子,最大的好处就是可以自由选择各种有趣的开源库,当然各种坑肯定是少不了的,尝试失败大不了换条路继续尝试。什么?怕麻烦?难道做这些不是因为热爱吗?

也总结下这个项目感受到的自身的不足吧(咳咳,我简单说两点哈)

  1. 跟优秀的人学习。不一定让你去拜师,网上优秀的开源项目有很多,简单动动手就能学习了,不要埋头苦干,也要抬头学习下其他人是怎么样做的,不然怎么知道你的不足。
  2. 计划很重要。记得我一次性列好了接下一段时间来要开发的功能,每天晚上下班都处于有序而忙碌的状态,项目几乎也是每天都有产出;然而没有计划约束的日子,只知道要学点什么,相关项目代码随便看看几个小时就过去了,再看成果可能产出有限甚至都没有产出。

差点忘了,这是我的GitHub项目地址,看到这了,不点个赞再走?

技术这条路上我走的有点慢,但也希望能该坚持下去走得更远

END