功能:利用Node每天定时发送邮件给指定邮箱。
需要的npm包:
nodemailer
node-schedule
实现步骤:
配置 nodemailer发送邮件开启定时邮件发送代码初始化:
新建一个文件夹用于存储代码,然后用命令行打开该文件夹执行一下命令安装相关依赖
# 生成 package.json 文件npm init -y# 安装 nodemailer 和 node-schedulenpm i nodemailer node-schedule -S
新建 index.js 作为程序入口文件
// index.js"use strict";const nodemailer = require("nodemailer");const schedule = require("node-schedule");async function main() {let transporter = nodemailer.createTransport({host: "",port: 465, // SMTP 端口secure: true, // true for 465, false for other portsauth: {user: 'xxxx@', // 发送者的邮箱,我这里选择 qq 邮箱pass: 'xxxxx', // SMTP 授权码,可以去具体的邮箱设置里面获取},});// send mail with defined transport objectlet info = await transporter.sendMail({from: 'Fred Foo <xxx@>', // 发送者的昵称和邮箱地址to: "xxx@, xxx@", // 接收者,可写多个接受者subject: "Hello ✔", // 邮件主题text: "老板: 下班来我办公司一趟!", // 主体html: 'html', // 可以发送html});console.log("Message sent: %s", info.messageId);// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@>// Preview only available when sending through an Ethereal accountconsole.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...}main()
运行上面的js文件即可发送邮件了
node index.jsMessage sent: <90fcd98d-d4fe-520e-0a5c-3a3d1b315091@>Preview URL: false
利用 node-schedule 实现定时发送
示例代码:
var schedule = require("node-schedule"); //1. 确定的时间执行var date = new Date(,12,10,15,50,0); schedule.scheduleJob(date, function(){console.log("执行任务");});//2. 秒为单位执行 //比如:每5秒执行一次var rule1= new schedule.RecurrenceRule(); var times1 = [1,6,11,16,21,26,31,36,41,46,51,56]; rule1.second = times1; schedule.scheduleJob(rule1, function(){console.log("执行任务"); });//3.以分为单位执行//比如:每5分种执行一次var rule2= new schedule.RecurrenceRule(); var times2 = [1,6,11,16,21,26,31,36,41,46,51,56]; rule2.minute = times2; schedule.scheduleJob(rule2, function(){console.log("执行任务"); }); //4.以天单位执行//比如:每天6点30分执行var rule = new schedule.RecurrenceRule();rule.dayOfWeek = [0, new schedule.Range(1, 6)];rule.hour = 6;rule.minute =30;var j = schedule.scheduleJob(rule, function(){console.log("执行任务");getData();});
配合上面下发邮件的代码,我们来实现每5秒发送一次邮件
// index.js"use strict";const nodemailer = require("nodemailer");const schedule = require("node-schedule");async function main() {let transporter = nodemailer.createTransport({host: "",port: 465, // SMTP 端口secure: true, // true for 465, false for other portsauth: {user: 'xxxx@', // 发送者的邮箱,我这里选择 qq 邮箱pass: 'xxxxx', // SMTP 授权码,可以去具体的邮箱设置里面获取},});let info = await transporter.sendMail({from: 'Fred Foo <xxx@>', // 发送者的昵称和邮箱地址to: "xxx@, xxx@", // 接收者,可写多个接受者subject: "Hello ✔", // 邮件主题text: "老板: 下班来我办公司一趟!", // 主体html: 'html', // 可以发送html});console.log("Message sent: %s", info.messageId);// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@>console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...}// 每五秒发送一次var rule = new schedule.RecurrenceRule() var times = [1,6,11,16,21,26,31,36,41,46,51,56]rule.second = times schedule.scheduleJob(rule1, function(){main() })
这样就实现了node定时发送邮件啦,还可以利用模板引擎自定义html当做邮件内容。
下期文章准备更新每天定期发送天气邮件,利用阿里的天气api实现获取每日天气信息。