由於最近本身建站須要添加友鏈,又不想每次去改靜態文件,因此抽出來一個表單,準備給你們填寫本身的信息而後提交到後臺審覈,可是我須要一個郵件來通知你們已經審覈經過了,因此我就須要一個發郵件的插件
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:`![](http://blog.lovemysoul.vip/favicon.ico) <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> ![](http://blog.lovemysoul.vip/_assets/beishang.0aa26ed3.jpg) ` } 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:`![](http://blog.lovemysoul.vip/favicon.ico) <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> ![](http://blog.lovemysoul.vip/_assets/beishang.0aa26ed3.jpg) ` } 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...