使用 Server-sent Events(SSE) 实现邮件实时提醒和推送
现今,邮件作为人与人之间进行信息沟通的重要形式,已经得到广泛的应用。然而,在传统的邮件使用中,我们往往需要手动刷新页面来获取新邮件,面对大量的邮件甚至可能漏掉一些重要邮件。
Server-sent Events(SSE)是一种HTML5提供的服务器推送技术,它可以在客户端与服务器之间建立一个持久的连接,当服务器有新数据时,可以直接将数据推送到客户端,从而使客户端可以实时获取最新数据。在前端开发中,SSE已经得到广泛的应用,例如交易价格实时更新,聊天窗口实时消息等。
在本文中,我们将介绍如何使用SSE实现邮件实时提醒和推送。
- 实现思路
使用Node.js作为服务器端编程语言,和nodemailer库来发送邮件,并且使用express框架搭建服务器。客户端则使用HTML5的SSE来建立与服务器持久的连接,当邮件发送时,服务器将自动向客户端推送邮件内容。
- 服务器端代码
首先,我们通过npm进行nodemailer库的安装,该库是Node.js中的邮件发送库。
npm install nodemailer
接着,我们编写服务器端代码 server.js,代码实现了邮件的发送和SSE的建立和推送。
var nodemailer = require('nodemailer'); var express = require('express'); var app = express(); // 邮件发送部分 var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'sender@gmail.com', pass: 'password' } }); // SSE推送部分 app.get('/sse', function(req, res) { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Access-Control-Allow-Origin': '*' }); setInterval(function() { // 查询邮件是否到达 var mailOptions = { from: 'sender@gmail.com', to: 'receiver@gmail.com', subject: '邮件主题', html: '<p>邮件内容</p>' }; transporter.sendMail(mailOptions, function(err, info) { if (err) { console.log(err); } else { console.log('Message sent: ' + info.response); res.write('data: ' + JSON.stringify(mailOptions) + '\n\n'); } }); }, 1000); }); app.listen(3000);
上述代码中的邮件发送部分使用的是gmail邮箱服务,具体可以根据需要进行修改。邮件发送成功后,将邮件内容使用JSON.stringify()方法转换为字符串格式并推送到客户端。在服务端开启了每1秒钟的查询和邮件发送操作。同时,当前SSE规范还规定了一个"id:"字段,用来标示客户端收到的最后一条消息的id,这样客户端在与服务器断开连接时,可以通过“Last-event-ID”字段将该消息的id带到下一次连接,使得服务器可以从该id继续向客户端推送后续的消息。
- 客户端代码
接下来,我们来编写客户端代码,代码中实现了与服务器端建立SSE的连接,并将接收到的邮件数据实时显示在网页中。
<!DOCTYPE html> <html> <head> <title>SSE邮件提醒</title> <meta charset="utf-8"> </head> <body> <h1>SSE邮件提醒</h1> <div id="email"></div> <script> var source = new EventSource('http://localhost:3000/sse'); source.addEventListener('message', function(event) { var email = JSON.parse(event.data); var mailHtml = email.html; // 显示邮件内容 document.getElementById('email').innerHTML = mailHtml; }, false); </script> </body> </html>
上述代码中的客户端使用了HTML5提供的EventSource对象来建立与服务器端的SSE连接,监听message事件并响应邮件内容。
- 效果展示
在浏览器中访问客户端页面 http://localhost:3000/index.html ,在服务器端运行 node server.js。当服务器发送邮件时,邮件的内容将自动推送到客户端网页中,如下图所示:
- 总结
本文详细介绍了如何使用SSE实现邮件实时提醒和推送,代码简单易懂,可供参考和学习。这种思路同样适用于其他实时数据的推送,如股票价格实时变化,交通路况实时更新等。使用SSE可以有效提高前端体验和响应速度,提升用户体验。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659f7993add4f0e0ff813e0e