基于Node.js实现nodemailer邮件发送


Posted in Javascript onJanuary 26, 2016

Nodemailer是一个简单易用的Node.js邮件发送组件,具体操作如下

1、安装nodemailer

npm install nodemailer --save

2、特点

Nodemailer的主要特点包括:

  • 支持Unicode编码
  • 支持Window系统环境
  • 支持HTML内容和普通文本内容
  • 支持附件(传送大附件)
  • 支持HTML内容中嵌入图片
  • 支持SSL/STARTTLS安全的邮件发送
  • 支持内置的transport方法和其他插件实现的transport方法
  • 支持自定义插件处理消息
  • 支持XOAUTH2登录验证

以上的功能特点,已经覆盖了大部分的发邮件的需求了,接下来就让我们动手开始写程序吧。

3、简单示例

这是一个完整的例子来发送电子邮件以明文和HTML本体

var nodemailer = require('nodemailer');

// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport('smtps://user%40gmail.com:pass@smtp.gmail.com');

// setup e-mail data with unicode symbols
var mailOptions = {
  from: 'Fred Foo ? <foo@blurdybloop.com>', // sender address
  to: 'bar@blurdybloop.com, baz@blurdybloop.com', // list of receivers
  subject: 'Hello ✔', // Subject line
  text: 'Hello world ?', // plaintext body
  html: '<b>Hello world ?</b>' // html body
};

// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
  if(error){
    return console.log(error);
  }
  console.log('Message sent: ' + info.response);
});

4、常见错误

{ [AuthError: Invalid login - 454 Authentication failed, please open smtp flag first!]
 name: 'AuthError',
 data: '454 Authentication failed, please open smtp flag first!',
 stage: 'auth' }

错误原因: 账号未设置该服务
解决方案: QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务

{ [SenderError: Mail from command failed - 501 mail from address must be same as authorization user]
 name: 'SenderError',
 data: '501 mail from address must be same as authorization user',
 stage: 'mail' }

错误原因: 发件账号与认证账号不同,即用户名和密码不匹配。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
跨域传值即主页面与iframe之间互相传值
Dec 09 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
jQuery基础_入门必看知识点
Jul 04 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
angular或者js怎么确定选中ul中的哪几个li
Aug 16 Javascript
Angular实现下拉框模糊查询功能示例
Jan 03 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
浅析Vue 生命周期
Jun 21 Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 Javascript
JavaScript小技巧整理篇(非常全)
Jan 26 #Javascript
基于canvas实现的绚丽圆圈效果完整实例
Jan 26 #Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 #Javascript
js实现的页面矩阵图形变换特效
Jan 26 #Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 #Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
You might like
一个MYSQL操作类
2006/11/16 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python中的包和模块实例
2014/11/22 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python新手学习可变和不可变对象
2020/06/11 Python
使用Python实现音频双通道分离
2020/12/25 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
体育教师个人的自我评价
2014/02/16 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
运动会广播稿150字
2014/02/19 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
2014年幼师工作总结
2014/11/22 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书