NodeJs之邮件(email)发送

一,介绍与需求

1.1,介绍

1,Nodemailer简介

Nodemailer是一个简单易用的Node.js邮件发送插件

github地址

Nodemailer的主要特点包括:

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

常见发邮件的字段:

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

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

  附件

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

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

2,emailjs简介

emailjs是一个简单易用的Node.js邮件发送插件

1 npm install emailjs  --save

下面讲的主要是Nodemailer发送邮件,毕竟星比较多嘛

1.2,需求

电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。

在很多项目中,我们都会遇到邮件注册,邮件反馈等需求。在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用。

二,配置使用

主要讲的是Nodemailer发送邮件

第一步:安装Nodemailer

1 npm install nodemailer --save

第二步:配置参数xml

在settingConfig.xml添加如下:

1  <?xml version="1.0" encoding="utf-8" ?>
2  <appSettings>
3    <add key="smtp" value="smtp.qq.com"/>
4    <!-- 配置服务 smtp.exmail.qq.com//企业邮箱 非qq; -->
5    <add key="mailFrom" value="*@qq.com"/>
6   <!--配置发送邮箱 -->
7    <add key="mailPwd" value="v567jvsvqajos67e"/>
8   <!--smtp授权码 -->
9  </appSettings>

第三步:封装发送邮件方法

使用内置传输的方式发送邮件,在sendEmail.js添加如下代码:

 1 var nodemailer = require("nodemailer");2 var settingConfig = require('../config/settingConfig.js');//解析参数3 4 var smtp = settingConfig.getValueByKey("smtp");5 var mailFrom = settingConfig.getValueByKey("mailFrom");6 var mailPwd = settingConfig.getValueByKey("mailPwd");7 8 function emailTo(email,subject,text,html,callback) {9     var transporter = nodemailer.createTransport({
10         host: smtp,
11         auth: {
12             user: mailFrom,
13             pass: mailPwd //授权码,通过QQ获取
14
15         }
16     });
17     var mailOptions = {
18         from: mailFrom, // 发送者
19         to: email, // 接受者,可以同时发送多个,以逗号隔开
20         subject: subject, // 标题
21     };
22     if(text != undefined)
23     {
24         mailOptions.text =text;// 文本
25     }
26     if(html != undefined)
27     {
28         mailOptions.html =html;// html
29     }
30
31     var result = {
32         httpCode: 200,
33         message: '发送成功!',
34     }
35     try {
36         transporter.sendMail(mailOptions, function (err, info) {
37             if (err) {
38                 result.httpCode = 500;
39                 result.message = err;
40                 callback(result);
41                 return;
42             }
43             callback(result);
44         });
45     } catch (err) {
46         result.httpCode = 500;
47         result.message = err;
48         callback(result);
49     }
50
51 }

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

安装插件

1 npm install nodemailer-smtp-transport  --save

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

 1 var nodemailer = require('nodemailer');2 var smtpTransport = require('nodemailer-smtp-transport');3 4 function emailTo(email,subject,text,html,callback) {5 // 开启一个 SMTP 连接池6     var transporter = nodemailer.createTransport(smtpTransport({7         host: smtp,//主机8         secure: true, // 使用 SSL9         secureConnection: true, // 使用 SSL
10         port: 465, // SMTP 端口
11         auth: {
12             user: mailFrom,
13             pass: mailPwd //授权码,通过QQ获取
14
15         }
16     }));
17     var mailOptions = {
18         from: mailFrom, // 发送者
19         to: email, // 接受者,可以同时发送多个,以逗号隔开
20         subject: subject, // 标题
21     };24         mailOptions.text =text;// 文本  30
31     var result = {
32         httpCode: 200,
33         message: '发送成功!',
34         data: [],
35     }
36     try {
37         transporter.sendMail(mailOptions, function (err, info) {
38             if (err) {
39                 result.httpCode = 500;
40                 result.message = err;
41                 callback(result);
42                 return;
43             }
44             callback(result);
45         });
46     } catch (err) {
47         result.httpCode = 500;
48         result.message = err;
49         callback(result);
50     }
51     transport.close(); // 如果没用,关闭连接池
52
53 }

第四步:发送邮件接口

在sendEmailApi.js添加如下代码:

 1 var mailer = require('../services/sendEmail.js');2 router.post("/SendEmail", function (req, res) {3     var email = req.body.email;4     var subject = "影琪通知";//标题5     var text =undefined;6     var html = "<p>你好</p><p>欢迎访问jackson影琪</p><p>点击下面链接进入访问吧:</p><p><a href='https://www.cnblogs.com/jackson-zhangjiang/'>https://www.cnblogs.com/jackson-zhangjiang/</a></p>";;7     mailer.emailTo(email, subject, text, html, function (data) {8         res.status(data.httpCode).json(data);9     })
10 })

第五步:抛出发送邮件接口

在app.js添加如下代码:

1 app.use("/api", require("./sendEmailApi.js"));

第六步:web前端调用

采用jquery的方式,使用ajax

 1  sendEmail: function (email, callBack) {2          var datajson = {3              "email": email4          };5          $.ajax({6              url: 'http://127.0.0.1:3000/api/' + 'SendEmail',7              type: "POST",8              dataType: "json",9              xhrFields: {
10                  withCredentials: true
11              },
12              crossDomain: true,
13              data: datajson,
14              success: function (data) {
15                  callBack(data);
16              },
17              error: function (err) {
18                  console.log(err);
19              }
20          });
21      }

第七步:效果

三,常见问题

1.账号未设置该服务

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

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

2.登录认证失败,可能由于smpt授权码/独立密码错误导致

1 Invalid login - 535 Authentication failed 

解决方案:

qq邮箱在测试smtp邮件服务器时,

一,在qq邮箱,设置,账户设置中.开启下smtp.

二,获取授权码.

三,在配置smtp服务器的密码时,注意一定要填你获得的授权码.不要用邮箱登录密码.否则会提示535 Authentication failed错误.

3.权限认证失败,可能由于授权码错误导致,或者发件服务器不对应 我在qq设置的时候就遇到过

解决方案:登录Foxmail,查看发件服务器是什么?我QQ邮箱发件服务器是smtp.qq.com,企业邮箱是:smtp.exmail.qq.com

NodeJs之邮件(email)发送相关推荐

  1. 【TOOLS】python3利用SMTP进行邮件Email自主发送

    2019.1.30更新 对于在阿里云服务器上运行本博客有几处需要改动的地方. 首先因为阿里云服务器里面有很多端口都被限制,所以以下的代码在本地可以成功,但在云服务器上并出现问题 通过我的不断实验,最终 ...

  2. python3 邮件方式发送测试报告

    以邮件方式发送测试报告 import smtplib from email.mime.text import MIMETextclass SendEmail:"""邮件方 ...

  3. python接收邮件g_Python接收Gmail新邮件并发送到gtalk的方法

    本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...

  4. Python Email发送,通知业务完成

    Email 发送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text ...

  5. python 收发邮件_python发送各类邮件的主要基本方法

    利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...

  6. python接收最新邮件_Python接收Gmail新邮件并发送到gtalk的方法

    本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...

  7. pop3通过时间或者条件取邮件_Python 进阶(三):邮件的发送与收取

    1. 发送邮件 SMTP 全称 Simple Mail Transfer Protocol,中文译为简单邮件传输协议,它能跨越网络传输邮件,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实 ...

  8. JavaWeb学习总结(五十一)——邮件的发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  9. jenkins 怎么配置阿里企业邮箱进行email发送

    jenkins 怎么配置阿里企业邮箱进行email发送 经过务必艰辛的查资料,分析问题,终于搞定了!!希望可以让大家少走弯路 例1:基本原理 """ 与配置其它邮箱不同, ...

最新文章

  1. Ajax基础知识梳理
  2. GitLab怎样实现新建仓库并允许开发者推送代码实现协同开发
  3. VS中安装DevExpress后在Winform的工具箱中不显示控件
  4. Mule ESB-3.Build a webservice proxy
  5. 正负样本不平衡处理方法总结
  6. (一)U盘安装ubuntu18.04.1
  7. 吉普赛人祖传的神奇读心术:你敢试吗?
  8. unicode转中文的工具
  9. pthread_create会导致内存泄露
  10. 为什么链接不上mysql数据库_java链接不上数据库,怎么解决!
  11. Centos7升级最新git
  12. julia语言 调用 java_以编程方式/动态导入Julia中的模块
  13. 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
  14. 库克回应乔纳森离职:不影响苹果继续创新
  15. 如何在 Adobe XD 中创建交互式原型?
  16. hdu 1004(排序+统计)
  17. 各种开源项目/库/工具介绍
  18. esp8266等待上电同步_[网络篇]ESP8266-NonOS学习笔记(三)之TCP通信Serverlt;-gt;Client
  19. python使用内置函数方法和桶排序方法实现随机数去重、排序输出
  20. a星地图测试工具_A星算法地图编辑器

热门文章

  1. xlsx表格怎么筛选重复数据_怎样在excel2010中筛选出重复数据呢?
  2. PHP解决某些特殊汉字符或汉字转码后成乱码或者空白的问题
  3. 使用JqueryEasyUI进行页面布局
  4. Spring boot 项目(十二)——实现电脑网页微信扫码自动授权
  5. 基于celeba数据集和pytorch框架实现dcgan的人脸图像生成
  6. 404常见的几种错误原因
  7. pyhton interpreter byterun和底层`code object`的简单了解
  8. 面试笔记-1.计算机网络面试核心
  9. 苹果笔记本计算机内存不足怎么办,苹果手机更新系统内存不够怎么处理-电脑内存不足怎么解决...
  10. 在单个虚拟机中搭建DPDK测试环境