5

本程序功能是上传excel表格,然后编辑邮件模板,根据excel每条内容,给每个人发送定制邮件。典型应用场景工资条,模板是相同的,但是每个人都有个性化的内容。

开发这个的起因是公司的hr小姐姐说以后工资条不通过邮件发送,而是纸质工资条,然后调戏下说是不是因为没有自动发邮件的工具。网上一搜好像没什么好的工具,然后就尝试着实现这个功能。

贴上github地址https://github.com/win5do/node-excel2email

主要目标

  1. 上传文件
  2. 读取excel数据
  3. 根据邮件模板创建不同的邮件
  4. 发送邮件

github上一搜,找到node-xlsxnodemailer两个库,前者可以帮我解析excel表格,后者则可以通过smtp服务器发送邮件。下面我们要做的就是实现一个简单的邮箱模板,编写一个易用的前端页面给用户,那上面那个流程串联起来,最后把发送邮件后的状态反馈给用户。

技术选型

  • 后端: node express session pug
  • 前端: jquery materialize-css(css框架) webpack
  • 通讯: ajax socket.io
  • 工具: node-xlsx nodemailer umeditor(富文本编辑器) multer(文件上传)

这个程序功能都放在一个页面里,也就没用vue、react等框架,直接pug + jquery + materialize-css搞定,主要是平时工作都是vue前端端分离,想体验一下传统的玩法。materialize-css是一个和bootstrap类似的css框架,风格是meterial-design风格,非常漂亮。

没有用的数据库,通过session区分用户,数据直接放到内存里,用后即焚。因为需要把每个邮件的发送结果即时反馈给前端,这里用到socket.io,通过tcp连接让服务器给客户端发送消息。查了一些资料,使用ajax轮询或Server-Sent Events也可以实现,不过还是websocket更优雅,对多用户支持更好。

前端资源这块,js模块 scss式样还是通过webpack处理,本来像复古用用gulp,但一想到要写一大堆task,还是webpack的loader方便,配置的也比较熟了,通过watch就能即时编译。

富文本编辑器挑了半天,github上星最多的quill,但是对中文支持不是很好,还有很多一大堆bug或者配置起来超复杂,还是选用了百度的umeditor,功能比较全,没有明显bug,但是不支持umd,囧。

效果预览

图片描述

图片描述

图片描述

最后

nodejs生态的各种轮子齐全,使用简单,把几个轮子组装起来功能满足需求,全后端无缝切换,开发效率杠杠的,这就是nodejs的优势所在。仅以此文记录项目实现的过程。把一个想法实现,还是很有成就感的。

参考文献

编写一个简单的JavaScript模板引擎
用node.js实现HTML5原生的comet(长连接)
学习 NodeJS 第八天:Socket 通讯


无风
670 声望63 粉丝