Node.js之自動發送郵件 | 僅二十行代碼便可

前言

由於最近本身建站須要添加友鏈,又不想每次去改靜態文件,因此抽出來一個表單,準備給你們填寫本身的信息而後提交到後臺審覈,可是我須要一個郵件來通知你們已經審覈經過了,因此我就須要一個發郵件的插件 nodemailer[0] ,固然大佬們已經知道了。由於平時node玩的比較少,因此也在這裏記錄一下

先上效果圖

老嚴你這標題黨 ,說好的定時給女友發郵件的小浪漫呢?
咱不着急哈?後面會講到,咱們先試下本身手動一步一步的去使用這款插件 nodemailerhtml

準備工做

咱們發郵件會須要一個 SMTP 受權碼!
咱們須要去郵箱裏面獲取,這裏我選擇的是QQ郵箱(由於搜到的教程就是QQ的)node

  1. 進入QQ郵箱

  1. 選擇帳戶

.jpg)git

  1. 翻到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務

  1. POP3/SMTP服務後面的開啓

.jpg)github

  1. 發送信息進行驗證

.jpg)shell

  1. 複製受權碼

.jpg)npm

配置

stop 就是這裏,別滑太快了json

建立一個文件夾

目錄名各位請便api

建立入口文件

我這裏命名時 app.js 各位自便安全

初始化

npm init -y

安裝

npm install nodemailer

老嚴這裏的 nodemailer 安裝的是 4.4.0 的版本微信

package.js

完成以後大概長這樣

{
  "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"
  }
}

come baby

你們看黑板,如今這裏是重點了哈,集中注意力
進入到 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

Di~ 收到了!


打開一看

開始定時任務

由於咱們執行完發送郵件以後,這個任務執行完成就已經關閉了。咱們須要一個定時任務來給它一直跑 node-schedule

安裝

npm install node-schedule

使用

// 引入
var schedule = require('node-schedule');
// 定時執行
schedule.scheduleJob('10 * * * * *', ()=>{
    sendEmail(data)
});

schedule 講解

引用一名博主的講解 《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'

咱們執行的是每分鐘的第10秒鐘發送郵件

看看郵箱

所有代碼

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

注意 startDaylocal 這兩個變量記得修改,否則我怕你會被家暴

本身也能夠進行自定義一點東西這樣會更好
如 郵件的主題 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

發送時間 EmailHourEmialMinminute 能夠本身選擇一下 如13:14 ,5:20 等等 我就不在這湊熱鬧了

執行一下這騷操做

node main.js

.jpg)

結果

.png)

註解地址

[0] https://github.com/nodemailer...

[1] https://github.com/node-sched...

[2] https://www.cnblogs.com/zhong...

相關文章
相關標籤/搜索