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邮件发送插件

 npm install emailjs  --save

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

1.2,需求

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

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

二,配置使用

主要讲的是Nodemailer发送邮件

第一步:安装Nodemailer

 npm install nodemailer --save

第二步:配置参数xml

在settingConfig.xml添加如下:
  <?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="smtp" value="smtp.qq.com"/>
<!-- 配置服务 smtp.exmail.qq.com//企业邮箱 非qq; -->
<add key="mailFrom" value="*@qq.com"/>
<!--配置发送邮箱 -->
<add key="mailPwd" value="v567jvsvqajos67e"/>
<!--smtp授权码 -->
</appSettings>

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

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

 var nodemailer = require("nodemailer");
var settingConfig = require('../config/settingConfig.js');//解析参数 var smtp = settingConfig.getValueByKey("smtp");
var mailFrom = settingConfig.getValueByKey("mailFrom");
var mailPwd = settingConfig.getValueByKey("mailPwd"); function emailTo(email,subject,text,html,callback) {
var transporter = nodemailer.createTransport({
host: smtp,
auth: {
user: mailFrom,
pass: mailPwd //授权码,通过QQ获取 }
});
var mailOptions = {
from: mailFrom, // 发送者
to: email, // 接受者,可以同时发送多个,以逗号隔开
subject: subject, // 标题
};
if(text != undefined)
{
mailOptions.text =text;// 文本
}
if(html != undefined)
{
mailOptions.html =html;// html
} var result = {
httpCode: 200,
message: '发送成功!',
}
try {
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
result.httpCode = 500;
result.message = err;
callback(result);
return;
}
callback(result);
});
} catch (err) {
result.httpCode = 500;
result.message = err;
callback(result);
} }

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

安装插件

 npm install nodemailer-smtp-transport  --save

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

 var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport'); function emailTo(email,subject,text,html,callback) {
// 开启一个 SMTP 连接池
var transporter = nodemailer.createTransport(smtpTransport({
host: smtp,//主机
secure: true, // 使用 SSL
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口
auth: {
user: mailFrom,
pass: mailPwd //授权码,通过QQ获取 }
}));
var mailOptions = {
from: mailFrom, // 发送者
to: email, // 接受者,可以同时发送多个,以逗号隔开
subject: subject, // 标题
}; mailOptions.text =text;// 文本
var result = {
httpCode: 200,
message: '发送成功!',
data: [],
}
try {
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
result.httpCode = 500;
result.message = err;
callback(result);
return;
}
callback(result);
});
} catch (err) {
result.httpCode = 500;
result.message = err;
callback(result);
}
transport.close(); // 如果没用,关闭连接池 }

第四步:发送邮件接口

在sendEmailApi.js添加如下代码:

 var mailer = require('../services/sendEmail.js');
router.post("/SendEmail", function (req, res) {
var email = req.body.email;
var subject = "影琪通知";//标题
var text =undefined;
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>";;
mailer.emailTo(email, subject, text, html, function (data) {
res.status(data.httpCode).json(data);
})
})

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

在app.js添加如下代码:

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

第六步:web前端调用

采用jquery的方式,使用ajax

  sendEmail: function (email, callBack) {
var datajson = {
"email": email
};
$.ajax({
url: 'http://127.0.0.1:3000/api/' + 'SendEmail',
type: "POST",
dataType: "json",
xhrFields: {
withCredentials: true
},
crossDomain: true,
data: datajson,
success: function (data) {
callBack(data);
},
error: function (err) {
console.log(err);
}
});
}

第七步:效果

三,常见问题

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.登录认证失败,可能由于smpt授权码/独立密码错误导致

 Invalid login -  Authentication failed 

解决方案:

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

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

二,获取授权码.

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

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

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

NodeJs之邮件(email)发送的更多相关文章

  1. nodejs实现邮件发送

    需要安装的node模块 nodemailer 新建项目目录 mail-test 进入这个项目里使用终端初始化package.json(npm init) 安装express和nodemailer并保存 ...

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

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4209586.html 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电 ...

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

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

  4. C#中邮件的发送基本操作

    本地配置的邮箱:http://localhost:6080/index.php //邮件的收发需要用到两个类   //1.用来创建一封邮件对象     //1.MailMessage 添加对 usin ...

  5. 配置 SQL Server Email 发送以及 Job 的 Notification通知功能

    配置 SQL Server Email 发送以及 Job 的 Notification通知功能 在与数据库相关的项目中, 比如像数据库维护, 性能警报, 程序出错警报或通知都会使用到在 SQL Ser ...

  6. 使用Python发送HTML格式的邮件(收到的邮件有发送方才是正解)

    发送html格式的和普通文本格式差不多,只是MIMEText(content,"html","utf-8"))与MIMEText(content,"p ...

  7. java实现简单邮件的发送以及常见问题

    java实现简单邮件的发送以及常见问题 最近遇到个需求需要实现发送邮件的功能,以前做发送邮件功能都是有邮箱用户名密码,通过用户名密码连接对应的SMTP服务器来实现邮件的发送.但是这次用公司内部的邮箱, ...

  8. Java 实现邮件的发送

                                             Java 实现邮件的发送 开发邮箱发送功能必须看邮箱方面的资料 改一些东西  (我的是qq 邮箱哟   开通 POP3 ...

  9. python selenium2示例 - email发送

    前言 在进行日常的自动化测试实践中,我们总是需要将测试过程中的记录.结果等等等相关信息通过自动的手段发送给相关人员.python的smtplib.email模块为我们提供了很好的email发送等功能的 ...

随机推荐

  1. 【bzoj 2326】【HNOI 2011】数学作业

    题解: 矩阵裸体. #include<cstdio> #include<cstring> #include<cmath> typedef long long ll; ...

  2. BZOJ_2157_旅游_树剖+线段树

    BZOJ_2157_旅游_树剖+线段树 Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但 ...

  3. 关于Python元祖,列表,字典,集合的比较

      定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'], ...

  4. (4)STM32使用HAL库实现串口通讯——理论讲解

    一.查询模式 1. 二.中断模式 1.中断接收. 1.1先看中断接收的流程(以 USART2 为例) 在启动文件中找到中断向量 USART2_IRQHandler 找到USART2_IRQHandle ...

  5. python里面的xlrd模块详解(一)

    那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? python操作excel主要用到xlr ...

  6. EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下?

    前言 这个问题从未遇见过,是一位前辈问我EF Core内存泄漏问题时我才去深入探讨这个问题,刚开始我比较惊讶,居然还有这种问题,然后就有了本文,直接拿前辈的示例代码并稍加修改成就了此文,希望对在自学E ...

  7. redis与CPU、内存

    任何一个后端应用,包括代码都要考虑对于CPU和内存的影响.redis本质上类似于nodejs,单进程.单线程,事件驱动,但不同的是redis是CPU密集型的.这里列出了redis与内存CPU的相关考虑 ...

  8. python中线程和进程(一)

    目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...

  9. asp.net core系列 48 Identity 身份模型自定义

    一.概述 ASP.NET Core Identity提供了一个框架,用于管理和存储在 ASP.NET Core 应用中的用户帐户. Identity添加到项目时单个用户帐户选择作为身份验证机制. 默认 ...

  10. 前端笔记之NodeJS(二)路由&REPL&模块系统&npm

    一.路由机制(静态资源文件处理) 1.1 Nodejs没有根目录 MIME类型:http://www.w3school.com.cn/media/media_mimeref.asp 在Apache中, ...