1. 前言

最近在写一个博客系统,在「评论」模块中,有这样一个需求:有用户1已经评论留言,用户2用户1的评论下,给用户1回复评论。

这时候需要发一封邮件通知用户1的评论收到了回复,所以就想写一个自动发邮件的功能。

在网上找到了「Nodemailer」这个项目,「Nodemailer」是一个简单易用的Node.js邮件发送组件,可以使用SMTP协议,用指定的账户发送电子邮件。

但是「Nodemailer」只能运行在Node.js环境中,在浏览器中直接使用会报错,使用不了。所以我的想法是,在自己的「阿里云服务器」Node.js环境中,使用express框架搭建一个简单的路由,「Nodemailer」运行在服务器上。在前端页面利用Axios发送http请求,服务器收到相应请求后,获取参数,使用「Nodemailer」发送电子邮件。

同时还要注意同源政策的问题。

话不多说,开始实现这样一个功能吧!

2. 客户端代码

客户端只需要通过Axios发送http请求给服务器即可:

axios({url: 'http://XX.XXX.XXX.XXX:4000/email',method: 'get',params: {name,owner,email: replyEmail,search: 'msg',},withCredentials: true,
}).then(() => message.success('回复成功!')).catch(err => console.error(err));

这里设置了withCredentialstrue,指定在涉及到跨域请求时,携带cookie信息。

3. 服务端代码

使用模块化路由,所有的路由请求都在app.js中处理,各个模块处理相应的逻辑。

app.js中,使用use()中间件拦截所有请求,为res统一设置header,解决同源限制问题。

app.js

const express = require('express');
const app = express();
const email = require('./email');// 拦截所有请求
app.use((req, res, next) => {// 1.允许哪些客户端访问我// * 代表允许所有的客户端访问我// 注意:如果跨域请求中涉及到cookie信息传递,值不可以为*号 比如是具体的域名信息res.header('Access-Control-Allow-Origin', 'http://localhost:3001');// 2.允许客户端使用哪些请求方法访问我res.header('Access-Control-Allow-Methods', 'get,post');// 允许客户端发送跨域请求时携带cookie信息res.header('Access-Control-Allow-Credentials', true);next();
});// 博客评论收到回复后的邮件提醒服务
app.use('/email', email);app.listen(4000);
console.log('服务器启动成功,监听4000端口...');

发送电子邮件的步骤写在email.js中,主要分为三步:

  1. 引入nodemailer
  2. 创建发件人的信息
  3. 发送电子邮件

这里我使用的是163邮箱,需要在163邮箱中,开启smtp服务,并获取到授权码

email.js

const express = require('express');
const email = express.Router();
// 1. 引入nodemailer
const nodemailer = require('nodemailer');// 2. 创建发件人的信息
const transporter = nodemailer.createTransport({host: 'smtp.163.com',port: 465,secureConnection: true, // use SSLauth: {user: 'lzxjack1998@163.com', // 自己的邮箱地址pass: 'xxxxxxxxxxxxxx', // 不是密码,是授权码},
});email.get('/', (req, res) => {const { name, owner, email: to, search } = req.query;const blogUrl = 'xxxxxxxxxxxxxxxxx';const html = 'xxxxxxxxxxxxxx';const subject = '评论回复提醒';const from = '"飞鸟"<lzxjack1998@163.com>';const mailOptions = {from, // 发件人to, // 收件人subject, // 邮件标题html, // 邮件内容,html格式};// 3. 发送电子邮件transporter.sendMail(mailOptions, (error, info) => {if (error) return console.log(error);console.log(info);});res.send('已成功发送邮件!');
});module.exports = email;

4. 发送邮件

将服务端代码放到云服务器上,运行app.js

尝试回复一个评论,发送axios请求,发送电子邮件,服务端打印相关信息:

成功收到邮件!

【教程】JavaScript利用Nodemailer发送电子邮件相关推荐

  1. sql 发送邮件网络附件_利用VBA发送附件电子邮件

    大家好,我们今日讲解"利用VBA发送附件电子邮件",这节内容是"VBA信息获取与处理"教程中第五个专题"利用VBA发送电子邮件"的第一节. ...

  2. vba 添加outlook 签名_利用VBA发送附件电子邮件

    大家好,我们今日讲解"利用VBA发送附件电子邮件",这节内容是"VBA信息获取与处理"教程中第五个专题"利用VBA发送电子邮件"的第一节. ...

  3. nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js

    nodemailer 附件 In the previous article, "How to send emails using Nodemailer?", we discusse ...

  4. nodemailer使用_如何使用Nodemailer使用HTML作为内容发送电子邮件 Node.js

    nodemailer使用 Prerequisite: 先决条件: How to send emails using Nodemailer | Node.js 如何使用Nodemailer发送电子邮件. ...

  5. thymealf如何实现传单个变量给html_纯前端使用JavaScript发送电子邮件,5个步骤图文教程...

    你不需要使用任何后端语言,如 PHP 或 Python.此外,你甚至不需要Node.js! 有很多方法可以读取这些数据.你可以将你的表单与数据库(如MySQL)连接,然后从数据库中读取传入的信息.好吧 ...

  6. 利用Excel批量高速发送电子邮件

    利用Excel批量高速发送电子邮件,分两步: 1. 准备待发送的数据: a.) 打开Excel,新建Book1.xlsx b.) 填入以下的内容, 第一列:接收人,第二列:邮件标题,第三列:正文,第四 ...

  7. 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件

    作者 | Mateusz Iwaniuk 译者 | 明明如月,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 文章配套代码:  https://github.com/iwaniukooo ...

  8. html5写发送邮件源码,简单5步用 JavaScript 直接通过前端发送电子邮件

    现在,即使是创建最基本的网站,程序员也必须使用现代的功能和技术.甚至像为你的朋友创建简单的投资组合这样的基本项目也可能涉及到一些问题,比如从联系人表单接收数据.有很多方法可以读取这些数据.你可以将表单 ...

  9. php实现国外邮箱,发送电子邮件 · 国外PHP框架Nette官网教程 · 看云

    # 发送电子邮件 几乎每个Web应用程序都需要发送电子邮件,无论是简报还是订单确认. 这就是为什么Nette Framework提供必要的工具. 本教程将向您介绍如何: **创建电子邮件 发送电子邮件 ...

最新文章

  1. Android/linux(earlysuspend、lateresume)睡眠唤醒机制简
  2. mes系统服务器要求,mes系统 服务器配置
  3. ​一网打尽 Linux 必备技能,就靠它了!
  4. 微信小程序 - 实战小案例 - 简易记事本
  5. K-Means聚类算法思想及实现
  6. sstv解码_SSTV通联活动:ISS国际空间站2020年1月30日和1月31日
  7. SAP GUI 安全性 下载文件
  8. 【游戏技术】建造防守 Build and Defense
  9. Win11 任意版本 直接安装 Android 应用 教程(最详细)
  10. 小米手机访问电脑共享文件_小米手机如何与电脑共享文件
  11. JavaScript防流量劫持-前端安全
  12. Python数据分析学习 二
  13. 数据库——数据库结构设计
  14. 面试过阿里等互联网大公司,我知道了这些套路
  15. 高德w ndows版地图,高德地图API
  16. linux 硬盘报错日志,Linux内核I/O系统报错日志与硬盘故障对应关系
  17. c++程序从1加到10(详细讲解版)
  18. OIM实现OIM用户修改、OIM用户Disable流程审批
  19. 聊一聊I/O那些事儿
  20. 判断顺序栈栈满的两种方式

热门文章

  1. Nginx配置作为中转服务器
  2. 全国青少年信息素养大赛图形化编程复赛·模拟二卷,含答案解析
  3. 弱电机房设备接地都包含哪些部分?又有什么样的作用?
  4. 达梦数据库DCS搭建
  5. LG30刷小米系统_小米红米手机第一次刷root数据怎么保留住,会清除数据吗
  6. MySQL新闻发布系统
  7. AI可以拥有自我意识吗?、
  8. 批量删除VC VS临时文件
  9. 逆向wireshark学习SSL协议算法(转)
  10. java员工管理系统实验报告_java员工管理系统实验报告怎么写?员工管理系统的风险控制有哪些?...