作为一个前端er,利用node独立做一些全栈小项目,是很有效率和必要的。

需要:

  做一个活动报名页面,用户填好的表单需要被工作人员收到,一想到把数据存数据库,还需要给工作人员写一个管理页面就觉得很麻烦。

  把表单数据通过邮件方式发送到相关人邮箱,很讨巧,很节约开发成本,就这样做。

核心模块:nodemailer

看看package.json

{
"devDependencies": {
"gulp": "^3.8.11",
"gulp-imagemin": "^2.2.1",
"gulp-less": "^3.0.3",
"gulp-notify": "^2.2.0",
"gulp-uglify": "^1.2.0",
"gulp-watch": "^4.2.4",
"require-dir": "^0.3.0"
},
"dependencies": {
"body-parser": "^1.15.0",
"express": "^4.13.4",
"nodemailer": "^2.3.0",
"swig": "^1.4.2"
}
}
  • devDependencies里全是gulp模块
  • 引入body-parser模块可以通过req.body.xx获取到表单的数据
  • 常规使用express
  • nodemailer用来支持发送邮件
  • swig是node的一个模板引擎

使用nodemailer:

1.这里用到的是QQ邮箱,配置好地址和自己的账户名和密码

var nodemailer = require("nodemailer");
var smtpTransport = nodemailer.createTransport({
host: 'smtp.exmail.qq.com',
port: 465,
secure: true, // use SSL
auth: {
user: 'yourqq@qq.com',
pass: 'password'
}
});

2.from和to设置邮件发送者和收件者的邮箱地址,

subject邮件title

html邮件内容

smtpTransport.sendMail执行发送,这里的res是express router的响应参数,这里只贴主要代码,详细代码最后发github地址

var mailOptions = {
  from: "yourqq@qq.com",
  to: "toqq@qq.com",
  subject: "node邮件",
  html: "<b>姓名: </b>"+name+"<br>"+
  "<b>性别: </b>" + sex + "<br>"+
  "<b>电话: </b>" + phone + "<br>"+
  "<b>邮箱: </b>" + email + "<br>"+
  "<b>QQ: </b>" + qq + "<br>"+
  "<b>年龄: </b>" + age + "<br>"+
  "<b>联系地址: </b><br><div style='margin-left:20px;margin-top:20px'>" + address + "</div><br>"+
  "<b>所在院校及专业: </b><br><div style='margin-left:20px;margin-top:20px'>" + school + "</div><br>"+
  "<b>学校地址: </b><br><div style='margin-left:20px;margin-top:20px'>" + schooladdress + "</div><br>"+
  "<b>跟我们说说你的大学吧: </b><br><div style='margin-left:20px;margin-top:20px'>" + des + "</div><br>"+
  "<b>个人书单及评价: </b><br><div style='margin-left:20px;margin-top:20px'>" + book + "</div><br>"
} smtpTransport.sendMail(mailOptions, function(err, resp){
  if(err){
    res.send({
      code: 201,
      msg: "报名失败,请重试"
    })
  }else{
    res.send({
      code: 200,
      msg: "报名成功"
    })
  }
  smtpTransport.close();//关闭连接池
});

其实很简单,核心代码就是这些~

绑定路由:

app.get('/', function(req, res) {
  res.render('index');
})
app.get('/success', function(req, res) {
  res.render('success');
}) app.post('/join', function(req, res){
  
  var name = req.body.name,
  sex = req.body.sex,
  phone = req.body.phone,
  email = req.body.email,
  qq = req.body.qq,
  age = req.body.age,
  address = req.body.address,
  school = req.body.school,
  schooladdress = req.body.schooladdress,
  des = req.body.des,
  book = req.body.book;
  //next do send
})

前端当然也有一些事情要做,写好页面,验证表单,提交表单。
当前只有两个页面,报名页面和报名成功页面。
页面内容不再叙述,详情看下面git地址

需要注意的问题:

  • 用不同的邮箱发送邮件,需要找到相应官方api地址
  • 邮件内容的html是有一定规则的,每个三方邮箱的规则都不同,可以查阅相关通用资料

https://github.com/zimv/nodemailer-demo


  

												

nodemailer实现node发送邮件的更多相关文章

  1. node 发送邮件demo (QQ邮箱)

    nodemailer是nodejs中的邮件发送模块,本文使用的版本为2.5.0 --下载模块 npm install nodemailer npm下载模块后,在项目中引入就可以使用: var node ...

  2. 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册

    项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...

  3. 转:Node.js邮件发送组件- Nodemailer 1.0发布

    原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...

  4. Nodejs之发送邮件nodemailer

    nodejs邮件模块nodemailer的使用说明 1.介绍 nodemailer是node的一个发送邮件的组件,其功能相当强大,普通邮件,传送附件,邮件加密等等都能实现,而且操作也十分方便. nod ...

  5. 使用node自动刷房源并发送可入住房源到邮箱

    因为住的地方离公司太远,每天上下班都要坐很久的班车,所以最近想搬到公司旁边的皖水公寓住.去问了一下公寓的客服,客服说房源现在没有了,只能等到别人退房,才能在网站上申请到. 如果纯靠手动F5刷新浏览器, ...

  6. Node.js发送电子邮件

    电子邮件作为最广泛使用的一种网络服务和我们的工作学习生活已经密不可分.接受信用卡的账单,注册网站,找回密码等等都需要用到它.今天在就来学习下如何在node下来发送邮件,为当前做的项目提供邮箱校验的功能 ...

  7. nodeJs的nodemailer发邮件报错hostname/IP doesn't match certificate's altnames怎么解决?

    今天在开发过程中碰到一个问题,即使用node发送邮件时报错hostname/IP doesn't match certificate's altnames,在网上查了解决办法有两个, 加rejectU ...

  8. vue koa2 mongodb 从零开始做个人博客(二) 登录注册功能后端部分

    0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.后端搭建 1.1项目结构 首先看一下后端的server目录 挨个解释一下 首先dbs文件夹顾名思义,操作数据库的,mod ...

  9. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

随机推荐

  1. c语言到汇编的学习

    [内存结构] C程序通过编译-汇编-连接,最后到可执行文件.载入内存有这几个部分: text:正文段,存放的是可执行的机器码段 data:存放初始化之后的全局变量和静态变量 bbs:存放未初始化的静态 ...

  2. 最快让你上手ReactiveCocoa之进阶篇

    前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...

  3. 手Q兴趣号的价值在哪里

    拥有5.21亿月活跃用户,如果不做点什么东西出来,实在是浪费至极.如此庞大的用户量,如果能够将内容贡献出来,那将是恐怖的,QQ空间产品就是很好的佐证. QQ群让个体用户能够连接在一起,单个的用户关系链 ...

  4. Javascript图表插件HighCharts用法案例

    最近还在忙着基于ABP的项目,但本篇博客和ABP无关,喜欢ABP框架的朋友请点击传送门. 这不,最近项目基本功能做的差不多了,现在在做一个数据统计的功能,需要绘制区域图(或折线图)和饼图.一开始,楼主 ...

  5. Java设计模式6:策略模式

    策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包 ...

  6. dojo/io-query源码解析

    该模块主要对url中的query部分进行处理,我们发送GET请求时,将参数直接放在URL中,经常碰到的需求就是把一个对象转化为query字符串放到url中去发送GET请求.io-query模块便提供了 ...

  7. 作业三:PSP记录个人项目耗时情况

    PSP2.1        Personal Software Process Stages Time Planning  计划    20min              Estimate 估计开发 ...

  8. Silverlight中异步调用WCF服务,传入回调函数

    以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void ...

  9. jQuery实现返回顶部

    由于项目需要,写了个返回顶部的小功能... /*返回顶部*/ function toTop() { $(".to_top").hide(); $(window).scroll(fu ...

  10. 分割超大Redis数据库例子

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/124.html?1455853509 薄荷 App 上的伙伴功能大量使用了 ...