nodemailer实现node发送邮件
作为一个前端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发送邮件的更多相关文章
- node 发送邮件demo (QQ邮箱)
nodemailer是nodejs中的邮件发送模块,本文使用的版本为2.5.0 --下载模块 npm install nodemailer npm下载模块后,在项目中引入就可以使用: var node ...
- 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册
项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...
- 转:Node.js邮件发送组件- Nodemailer 1.0发布
原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...
- Nodejs之发送邮件nodemailer
nodejs邮件模块nodemailer的使用说明 1.介绍 nodemailer是node的一个发送邮件的组件,其功能相当强大,普通邮件,传送附件,邮件加密等等都能实现,而且操作也十分方便. nod ...
- 使用node自动刷房源并发送可入住房源到邮箱
因为住的地方离公司太远,每天上下班都要坐很久的班车,所以最近想搬到公司旁边的皖水公寓住.去问了一下公寓的客服,客服说房源现在没有了,只能等到别人退房,才能在网站上申请到. 如果纯靠手动F5刷新浏览器, ...
- Node.js发送电子邮件
电子邮件作为最广泛使用的一种网络服务和我们的工作学习生活已经密不可分.接受信用卡的账单,注册网站,找回密码等等都需要用到它.今天在就来学习下如何在node下来发送邮件,为当前做的项目提供邮箱校验的功能 ...
- nodeJs的nodemailer发邮件报错hostname/IP doesn't match certificate's altnames怎么解决?
今天在开发过程中碰到一个问题,即使用node发送邮件时报错hostname/IP doesn't match certificate's altnames,在网上查了解决办法有两个, 加rejectU ...
- vue koa2 mongodb 从零开始做个人博客(二) 登录注册功能后端部分
0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.后端搭建 1.1项目结构 首先看一下后端的server目录 挨个解释一下 首先dbs文件夹顾名思义,操作数据库的,mod ...
- babeljs源码
babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...
随机推荐
- listView后面加控件,防止被挤
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 【整理】--【字符设备】cdev_init()/cdev_alloc(),cdev_add(),cdev_del()
(1) 内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject ...
- 添加Labels的两种方法
private void AddLabel(IFeatureLayer pLayer,string fieldname,ITextSymbol Symbol) { container.DeleteAl ...
- java jinfo命令详解
jinfo (configuration info): 功能:输出Java进程的系统信息与jvm参数. 摘要: jinfo [ option ] pid jinfo [ option ] execut ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- ado.net 向sql中插入新数据的同时获取自增重的id值
两种方法都可以实现: 要获取的自增长列为phonebookID 方法一: sql = "insert into phonebook (mobile,peoplename) output in ...
- 在CentOS上搭建最^1024基本的Nginx反向服务器
昨天有过去的同事突然问我,他在CentOS7上试验搭建反向服务器死活不成功.现将最简单的搭建步骤分享下: 0. 环境介绍 本次搭建的集群包括以下服务器 192.168.1.107:nginx反向服务器 ...
- android权限permission大全
1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...
- Apache Lucene 4.5 发布,Java 搜索引擎
Apache Lucene 4.5 发布了,该版本提供基于磁盘的文档值以及改进了过滤器的缓存.Lucene 4.5 的文档请看这里. Lucene 是apache软件基金会一个开放源代码的全文检索引擎 ...
- centos 6.5 中设置mysql 5.1.73 主从同步配置过程
本文章给大家介绍centos 6.5设置mysql主从同步过程记录,希望文章对各位会带来帮助. 涉及到的centos系统均为虚拟机,VM下安装的版本. 在centos 6.5上设置了mysql主从功 ...