NodeJs之邮件(email)发送
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)发送相关推荐
- 【TOOLS】python3利用SMTP进行邮件Email自主发送
2019.1.30更新 对于在阿里云服务器上运行本博客有几处需要改动的地方. 首先因为阿里云服务器里面有很多端口都被限制,所以以下的代码在本地可以成功,但在云服务器上并出现问题 通过我的不断实验,最终 ...
- python3 邮件方式发送测试报告
以邮件方式发送测试报告 import smtplib from email.mime.text import MIMETextclass SendEmail:"""邮件方 ...
- python接收邮件g_Python接收Gmail新邮件并发送到gtalk的方法
本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...
- Python Email发送,通知业务完成
Email 发送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text ...
- python 收发邮件_python发送各类邮件的主要基本方法
利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...
- python接收最新邮件_Python接收Gmail新邮件并发送到gtalk的方法
本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...
- pop3通过时间或者条件取邮件_Python 进阶(三):邮件的发送与收取
1. 发送邮件 SMTP 全称 Simple Mail Transfer Protocol,中文译为简单邮件传输协议,它能跨越网络传输邮件,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实 ...
- JavaWeb学习总结(五十一)——邮件的发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- jenkins 怎么配置阿里企业邮箱进行email发送
jenkins 怎么配置阿里企业邮箱进行email发送 经过务必艰辛的查资料,分析问题,终于搞定了!!希望可以让大家少走弯路 例1:基本原理 """ 与配置其它邮箱不同, ...
最新文章
- Ajax基础知识梳理
- GitLab怎样实现新建仓库并允许开发者推送代码实现协同开发
- VS中安装DevExpress后在Winform的工具箱中不显示控件
- Mule ESB-3.Build a webservice proxy
- 正负样本不平衡处理方法总结
- (一)U盘安装ubuntu18.04.1
- 吉普赛人祖传的神奇读心术:你敢试吗?
- unicode转中文的工具
- pthread_create会导致内存泄露
- 为什么链接不上mysql数据库_java链接不上数据库,怎么解决!
- Centos7升级最新git
- julia语言 调用 java_以编程方式/动态导入Julia中的模块
- 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?
- 库克回应乔纳森离职:不影响苹果继续创新
- 如何在 Adobe XD 中创建交互式原型?
- hdu 1004(排序+统计)
- 各种开源项目/库/工具介绍
- esp8266等待上电同步_[网络篇]ESP8266-NonOS学习笔记(三)之TCP通信Serverlt;-gt;Client
- python使用内置函数方法和桶排序方法实现随机数去重、排序输出
- a星地图测试工具_A星算法地图编辑器
热门文章
- xlsx表格怎么筛选重复数据_怎样在excel2010中筛选出重复数据呢?
- PHP解决某些特殊汉字符或汉字转码后成乱码或者空白的问题
- 使用JqueryEasyUI进行页面布局
- Spring boot 项目(十二)——实现电脑网页微信扫码自动授权
- 基于celeba数据集和pytorch框架实现dcgan的人脸图像生成
- 404常见的几种错误原因
- pyhton interpreter byterun和底层`code object`的简单了解
- 面试笔记-1.计算机网络面试核心
- 苹果笔记本计算机内存不足怎么办,苹果手机更新系统内存不够怎么处理-电脑内存不足怎么解决...
- 在单个虚拟机中搭建DPDK测试环境