通常我们做node项目时,可能我们会碰到做一个简单的邮件反馈,那么我们今天就来讨论一下,其中遇到的各种坑。

  总的来说做这个东西,我们可能需要node第三方依赖模块,来实现我们要达到的效果。

  这里我推荐两个模块:https://github.com/pingfanren/Nodemailer

npm install nodemailer   //这个模块不错,github上星也比较多,还经常有维护,但是坑也比较多

  另一个,https://github.com/eleith/emailjs

npm install emailjs  --save 

  这里我用的是nodemailer模块,毕竟用的人比较多,跟随主流呢

  它的特点:

  • 使用Unicode编码
  • 支持Windows系统,不需要安装依赖
  • 支持纯文本和HTML格式
  • 支持发送附件(包括大型附件)
  • 在HTML中嵌入图片
  • 支持SSL/STARTTLS安全协议
  • 不同的传输方法,可以使用内置也可以使用外部插件的形式
  • 提供自定义插件支持(比如增加DKIM签名,使用markdown代替HTML等等)
  • 支持XOAUTH2登录验证(以及关于更新的令牌反馈)

安装使用

npm install nodemailer --save

  使用内置传输发送邮件,可以查看支持列表:https://github.com/andris9/nodemailer-wellknown#supported-services

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
//https://github.com/andris9/nodemailer-wellknown#supported-services 支持列表
service: 'qq',
port: , // SMTP 端口
secureConnection: true, // 使用 SSL
auth: {
user: '768065158@qq.com',
//这里密码不是qq密码,是你设置的smtp密码
pass: '*****'
}
}); // NB! No need to recreate the transporter object. You can use
// the same transporter object for all e-mails // setup e-mail data with unicode symbols
var mailOptions = {
from: '768065158@qq.com', // 发件地址
to: '528779822@qq.com', // 收件列表
subject: 'Hello sir', // 标题
//text和html两者只支持一种
text: 'Hello world ?', // 标题
html: '<b>Hello world ?</b>' // html 内容
}; // send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response); });

  发送邮件成功以后我们很少会有操作,但也有极少数情况需要在成功以后会处理一些特殊信息的,这时候info对象就能发挥余热了。info对象中包含了messageId、envelop、accepted和response等属性,具体看文档我不一一介绍了。

  使用其他传输插件   https://github.com/andris9/nodemailer-smtp-transport

npm install nodemailer-smtp-transport  --save

  其他代码类似,差别只是在创建transport上,所以这里我就写一部分代码:

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport'); // 开启一个 SMTP 连接池
var transport = nodemailer.createTransport(smtpTransport({
host: "smtp.qq.com", // 主机
secure: true, // 使用 SSL
secureConnection: true, // 使用 SSL
port: , // SMTP 端口
auth: {
user: "gaolu19901228@qq.com", // 账号
pass: "******" // 密码
}
})); // 设置邮件内容
var mailOptions = {
from: "768065158<768065158@qq.com>", // 发件地址
to: "528779822@qq.com", // 收件列表
subject: "Hello world", // 标题
text:"hello",
html: "<b>thanks a for visiting!</b> 世界,你好!" // html 内容
} // 发送邮件
transport.sendMail(mailOptions, function(error, response) {
if (error) {
console.error(error);
} else {
console.log(response);
}
transport.close(); // 如果没用,关闭连接池
});

  下面列出了一些发邮件的字段:

  • from 发送者邮箱
  • sender 发送者区域显示的信息
  • to 接收者邮箱
  • cc 抄送者邮箱
  • bcc 密送者邮箱
  • subject 邮箱主题
  • attachments 附件内容
  • watchHtml apple watch指定的html版本
  • text 文本信息
  • html html内容
  • headers 另加头信息
  • encoding 编码格式

  邮件内容使用UTF-8格式,附件使用二进制流。

  附件

  附件对象包含了下面这些属性:

  • filename 附件名
  • content 内容
  • encoding 编码格式
  • path 文件路径
  • contentType 附件内容类型 

常见错误

  1.账号未设置该服务

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

  解决方案:
  QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务

  2.发件账号与认证账号不同

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

  3.登录认证失败,可能由于smpt独立密码错误导致 我在qq设置的时候就遇到过

Invalid login -  Authentication failed 

  解决方案:

  qq邮箱在测试smtp邮件服务器时,一,在qq邮箱,设置,账户设置中.开启下smtp.二,设置一下独立密码.三,在配置smtp服务器的密码时,注意一定要填你设置的独立密码.不要用邮箱登录密码.否则会提示535 Authentication failed错误.

  

资料参考:

  qq邮箱smpt设置独立密码:http://wap.yzmg.com/app/103426.html

  nodejs使用 nodemailer发送邮件

  Nodejs发邮件组件Nodemailer

  用nodemailer组件发邮件

  nodemailer使用过程中发现的一些问题

  nodeemail wellkown

node.js发送邮件email的更多相关文章

  1. Node.js 发送Email

    章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...

  2. Node.js发送邮件

    1.使用nodemailer模块 var nodemailer = require("nodemailer"); 2.代码如下 exports.send_email = funct ...

  3. 用Node.js发送邮件

    本文讲的是用Node.js通过一个开启smtp的已有的邮箱账号发送邮件,而不是如何创建一个邮件服务器 开启smtp服务 首先要去要使用的邮箱中设置开启smtp,才能正常发送邮件 这边以163邮箱为例 ...

  4. node.js 发送邮件

    var nodemailer = require('nodemailer'); var smtpTransport = require('nodemailer-smtp-transport'); // ...

  5. Node.js 文件系统模块

    章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...

  6. Node.js 介绍

    章节 Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js ...

  7. Node.js使用Nodemailer发送邮件

    除了Python,在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用.Nodemailer包就可以帮助我们快速实现发送邮件的功能. Nodemailer简介 Nodem ...

  8. node.js 模拟自动发送邮件验证码

    node.js 模拟自动发送邮件验证码 引言 正文 1. QQ邮箱设置 2. 安装nodemailer 3.配置信息 4.综合 5.讲解 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号 ...

  9. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

随机推荐

  1. 图解HTTP学习笔记——简单的HTTP协议

    简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...

  2. proto序列化

    proto序列化和反序列化类 序列化是将我们的Protobuf类对象转换成字节数组的方法,网络底层我们从服务器获取到的是字节数组,反序列化是将字节转成proto类对象的方法 public class ...

  3. 存储过程打印超过8000的VARCHAR字符的问题

    DECLARE @info NVARCHAR(MAX) --SET @info to something big PRINT CAST(@info AS NTEXT) 这样就可以输出超过8000的字符 ...

  4. symfony获取POST数据

    $request = $this->getRequest(); $messageid = $this->strip_tags($request->get('messageid')); ...

  5. JS去除字符串左右两端的空格

    去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写.下面的实现方法是用到了正则表达式,效率不错,并把这三 ...

  6. WebSocket、Socket、TCP、HTTP区别

    https://www.cnblogs.com/merray/p/7918977.html

  7. layer的用法

    layer的用法: 使用之前必须导入包如下: #import<QuartzCore/QuartzCore.h> 否则使用控件.layer时,是不会提示的,粘贴过来的代码会直接报错. 就拿v ...

  8. Hadoop教程(五)Hadoop分布式集群部署安装

    Hadoop教程(五)Hadoop分布式集群部署安装 1 Hadoop分布式集群部署安装 在hadoop2.0中通常由两个NameNode组成,一个处于active状态,还有一个处于standby状态 ...

  9. scala spray 概念性内容的总结

    spray 是基于 akka 的轻量级 scala 库,可用于编写 REST API 服务.了解 spray 的 DSL 后可以在很短的时间内写出一个 REST API 服务,它的部署并不需要 tom ...

  10. backbone学习笔记:视图(View)

    Backbone 视图对象主要用来渲染数据,监听事件. Backbone的视图对象可以展示Model数据,也可以把用户编辑的Model数据传递到后台,可以通过监听事件操作视图里的DOM元素 举例: v ...