由于最近本身建站须要添加友链,又不想每次去改静态文件,因此抽出来一个表单,准备给你们填写本身的信息而后提交到后台审核,可是我须要一个邮件来通知你们已经审核经过了,因此我就须要一个发邮件的插件
nodemailer
[0] ,固然大佬们已经知道了。由于平时node玩的比较少,因此也在这里记录一下
老严你这标题党 ,说好的定时给女友发邮件的小浪漫呢?
咱不着急哈?后面会讲到,咱们先试下本身手动一步一步的去使用这款插件 nodemailer
html
咱们发邮件会须要一个 SMTP 受权码!
咱们须要去邮箱里面获取,这里我选择的是QQ邮箱(由于搜到的教程就是QQ的)node
.jpg)git
.jpg)github
.jpg)shell
.jpg)npm
stop 就是这里,别滑太快了json
目录名各位请便api
我这里命名时 app.js 各位自便安全
npm init -y
npm install nodemailer
老严这里的 nodemailer 安装的是 4.4.0
的版本微信
完成以后大概长这样
{ "name": "nodeMailDemo", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", // dev 这是老严本身加上去的哈 "dev":"node app.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "nodemailer": "^4.4.0" } }
你们看黑板,如今这里是重点了哈,集中注意力
进入到 app.js 中
const nodemailer = require('nodemailer');
// 建立 nodemailer 配置 let transporter = nodemailer.createTransport({ //支持列表: https://nodemailer.com/smtp/well-known/ service: 'QQ', // 老严用的是 QQ port: 465, // SMTP 端口 这个不用管 secureConnection: true, auth: { user: '你的邮箱@qq.com', pass: '这里填写咱们刚刚获取到的smtp受权码', } });
let mailOptions = { from: '"NickName" <你的邮箱@qq.com>', to: '接收人的邮箱', subject: '发文章的标题', / text: '这里填写你发送的内容' // html:'这里也能够写html' };
transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('邮件发送成功 ID:', info.messageId); });
总共才 20 来行的代码到底行不行呢?
node app.js
const nodemailer = require('nodemailer'); //发送邮件的node插件 function sendEmail (data){ let transporter = nodemailer.createTransport({ service: 'QQ', // 发送者的邮箱厂商,支持列表:https://nodemailer.com/smtp/well-known/ port: 465, // SMTP 端口 secureConnection: true, // SSL安全连接 auth: { //发送者的帐户密码 user: '2407488005@qq.com', //帐户 pass: 'smtp 受权码', //smtp受权码,到邮箱设置下获取 } }); let mailOptions = { from: '"悲伤日记" <2407488005@qq.com>', // 发送者昵称和地址 to: data.email, // 接收者的邮箱地址 subject: '悲伤日记 | 友链交换请求审核结果', // 邮件主题 html: data.content }; //发送邮件 transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('邮件发送成功 ID:', info.messageId); }); } // 这里是 nickName, createTime, link 经过 api 返回的参数进行动态填写的 let nickName, createTime, link; nickName = '严先生的博客' createTime = '2021-01-26 15:20'; link = 'http://blog.lovemysoul.vip' let data = { email:'491324693@qq.com', content:` <p style="text-indent: 2em;">亲爱的 ${ nickName } </p> <p style="text-indent: 2em;">您在${ createTime } 申请的 ${ link } 交换友链已经审核经过!已经自动建立成功!能够前往 <a href="http://blog.lovemysoul.vip/Friendship.html">悲伤日记</a> 进行查看。感谢您的支持!</p> <p style="text-indent: 2em;">祝您工做顺利,心想事成</p> <p style="text-align: right;">—— 悲伤日记</p> <p>若有疑问能够关注悲伤日记微信公众号进行协调 </p>  ` } sendEmail(data)
node app.js # or npm run dev
打开一看
由于咱们执行完发送邮件以后,这个任务执行完成就已经关闭了。咱们须要一个定时任务来给它一直跑 node-schedule
npm install node-schedule
// 引入 var schedule = require('node-schedule'); // 定时执行 schedule.scheduleJob('10 * * * * *', ()=>{ sendEmail(data) });
引用一名博主的讲解 《Nodejs学习笔记(十二)--- 定时任务(node-schedule)》[2]
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL) 6个占位符从左到右分别表明:秒、分、时、日、月、周几 '*'表示通配符,匹配任意,当秒是'*'时,表示任意秒数都触发,其它类推 下面能够看看如下传入参数分别表明的意思 每分钟的第30秒触发: '30 * * * * *' 每小时的1分30秒触发 :'30 1 * * * *' 天天的凌晨1点1分30秒触发 :'30 1 1 * * *' 每个月的1日1点1分30秒触发 :'30 1 1 1 * *' 2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *' 每周1的1点1分30秒触发 :'30 1 1 * * 1'
const nodemailer = require('nodemailer'); //发送邮件的node插件 var schedule = require('node-schedule'); function sendEmail (data){ let transporter = nodemailer.createTransport({ service: 'QQ', port: 465, secureConnection: true, auth: { user: '2407488005@qq.com', pass: '受权码', } }); let mailOptions = { from: '"悲伤日记" <2407488005@qq.com>', to: data.email, subject: '悲伤日记 | 友链交换请求审核结果', html: data.content }; transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('邮件发送成功 ID:', info.messageId); }); } let nickName, createTime, link ; nickName = '严先生的博客' createTime = '2021-01-26 15:20'; link = 'http://blog.lovemysoul.vip' let data = { email:'491324693@qq.com', content:` <p style="text-indent: 2em;">亲爱的 ${ nickName } </p> <p style="text-indent: 2em;">您在${ createTime } 申请的 ${ link } 交换友链已经审核经过!已经自动建立成功!能够前往 <a href="http://blog.lovemysoul.vip/Friendship.html">悲伤日记</a> 进行查看。感谢您的支持!</p> <p style="text-indent: 2em;">祝您工做顺利,心想事成</p> <p style="text-align: right;">—— 悲伤日记</p> <p>若有疑问能够关注悲伤日记微信公众号进行协调 </p>  ` } schedule.scheduleJob('10 * * * * *', ()=>{ sendEmail(data) });
前面的都会了? 想要玩这个那还不简单,继续找轮子,老严在 GitHub 上找到了一个完美的 demo 亲测有效
demo : https://github.com/Vincedream...
直接克隆下来
git clone https://github.com/Vincedream/NodeMail.git & cd NodeMail
安装依赖
npm install
进入到根目录的 main.js 而后修改刚刚咱们说的配置
所有填写进去以后
node main.js
注意 startDay
、local
这两个变量记得修改,否则我怕你会被家暴
本身也能够进行自定义一点东西这样会更好
如 邮件的主题 EmailSubject
我贴一下模板 感受有点过度
let msgTitle = ["亲爱滴小宝贝!星期一了又是元气满满的一天 taim i'ngra leat", "康康小宝贝!熬过了昨天和一上午,还有三天半放假 I love you", "冲冲冲本周已通过完1/2了!今天也要要开开心心的噢 je t'aime", "周四了!无论你在哪里,我永远都在你转身的距离。 ich liebe dich", "哈哈哈,还有半天就要放假了!快坑老公吃大餐吧 σε αγαπώ se agapo", "你老公在旁边,直接喊他说爱你!哼" ] let EmailSubject = msgTitle[new Date().getDay() - 1]
单身狗暴击 * 9999999
发送时间 EmailHour
、 EmialMinminute
能够本身选择一下 如13:14 ,5:20 等等 我就不在这凑热闹了
node main.js
.jpg)
.png)
[0] https://github.com/nodemailer...