Node.js 应用---定时给自己发送邮件

参照传智播客的视频所写代码。

js代码:

//引用superagent包,用于服务器发送http请求
const request = require('superagent');
//导入cheerio包 解析http
const cheerio = require('cheerio');
//导入 art-template
const template = require('art-template');
//导入PATH
const path = require('path');
//导入nodemaler发送邮件的包
const nodemailer = require('nodemailer');
//导入定时任务包
var schedule = require('node-schedule');

function getDate(){
    return new Promise((resolve , reject)=>{
        //现在的时间
        const today = new Date();
        //认识的时间
        const meet = new Date("**-**-**");
        //认识的天数
        const count = Math.floor((today - meet)/1000/60/60/24);
        //今天的日期
        const format = today.getFullYear() + " / " +(today.getMonth()+1) + " / " + today.getDate();
        const dayDate = {
            count,
            format
        }
        // console.log(daydate);
        resolve(dayDate);
    });   
}
// getDate();

//请求墨迹天气的数据
function getMojiData(){
    return new Promise((resolve , reject)=>{
        request.get('http://tianqi.moji.com/weather/china/hebei/shijiazhuang').end((err,res)=>{
        if(err) return console.log("数据请求失败");
        // console.log(res.text);
        const $ = cheerio.load(res.text);
        //温度
        const wendu = $(".wea_weather em").text();
        //图片
        const icon = $('.wea_weather span img').attr('src');
        //天气
        const weather = $(".wea_weather b").text();
        //提示
        const tips = $(".wea_tips em").text();
        //墨迹对象
        const mojiData = {
            icon,
            weather,
            wendu,
            tips
        }
        resolve(mojiData);
    });   
    }); 


    
}
// getMojiData();

//请求One页面抓取数据
function getOneData(){
    return new Promise((resolve , reject)=>{
        request.get('http://wufazhuce.com/').end((err,res)=>{
        if(err) return console.log("数据请求失败");
        
        //把返回值中的数据解析成HTML
        const $ = cheerio.load(res.text);
        //抓取One的图片
        const img = $('.carousel-inner>.item>img, .carousel-inner>.item>a>img').eq(0).attr('src');
        //抓取One的文本
        const text = $('.fp-one .fp-one-cita-wrapper .fp-one-cita a').eq(0).text();

        const OneData = {
            img,
            text
        }

        resolve(OneData);  
    });  
    }); 
    
}

function getOneData_2(){
    return new Promise((resolve , reject)=>{
        request.get('http://wufazhuce.com/').end((err,res)=>{
        if(err) return console.log("数据请求失败");
        
        //把返回值中的数据解析成HTML
        const $ = cheerio.load(res.text);
        //抓取One的图片
        const img = $('.carousel-inner>.item>img, .carousel-inner>.item>a>img').eq(2).attr('src');
        //抓取One的文本
        const text = $('.fp-one .fp-one-cita-wrapper .fp-one-cita a').eq(2).text();

        const OneData = {
            img,
            text
        }

        resolve(OneData);  
    });  
    }); 
    
}
// getOneData();

//渲染邮件
async function renderTemplate(){
    //获取日期数据
    const dayData = await getDate();
    //获取墨迹天气数据
    const mojiData = await getMojiData();
    //获取One数据
    const oneData = await getOneData();
    // console.log(dayData);
    // console.log(mojiDate);
    // console.log(oneData);
    return new Promise((resolve,reject)=>{
        const html = template(path.join(__dirname,"./mail.html"),{
            dayData,
            mojiData,
            oneData
        });
        // console.log(html);
        resolve(html);
    });
    
}

async function renderTemplate_2(){
    //获取日期数据
    const dayData = await getDate();
    //获取墨迹天气数据
    const mojiData = await getMojiData();
    //获取One数据
    const oneData = await getOneData_2();
    // console.log(dayData);
    // console.log(mojiDate);
    // console.log(oneData);
    return new Promise((resolve,reject)=>{
        const html = template(path.join(__dirname,"./mail.html"),{
            dayData,
            mojiData,
            oneData
        });
        // console.log(html);
        resolve(html);
    });
    
}
// renderTemplate();







async function sendMail() {
    
    const html = await renderTemplate();
    // console.log(html);
    
    let transporter = nodemailer.createTransport({
        host: "smtp.163.com",
        port: 465,
        secure: true, // true for 465, false for other ports
        auth: {
            user: "**@**", // generated ethereal user
            pass: "***" // generated ethereal password
        }
    });

    // send mail with defined transport object
    let mailOptions = {
        from: '"自己" <**@**>', // sender address
        to: "**@**", // list of receivers
        subject: "最好的自己", // Subject line
        html: html // html body
    };

    transporter.sendMail(mailOptions,(error,info = {}) =>{
        if(error){
            console.log(error);
            sendMail();
        }
        console.log("发送成功",info.messageId);
        console.log("等待下一次发送!");
    });


}

async function sendMail_2() {
    
    const html = await renderTemplate_2();
    // console.log(html);
    
    let transporter = nodemailer.createTransport({
        host: "smtp.163.com",
        port: 465,
        secure: true, // true for 465, false for other ports
        auth: {
            user: "**@**", // generated ethereal user
            pass: "***" // generated ethereal password
        }
    });

    // send mail with defined transport object
    let mailOptions = {
        from: '"自己" <**@**>', // sender address
        to: "**@**", // list of receivers
        subject: "最好的自己", // Subject line
        html: html // html body
    };

    transporter.sendMail(mailOptions,(error,info = {}) =>{
        if(error){
            console.log(error);
            sendMail();
        }
        console.log("发送成功",info.messageId);
        console.log("等待下一次发送!");
    });


}

// sendMail_2();


 
var j = schedule.scheduleJob('00 45 21 * * *', function(){
    sendMail();
  console.log('定时任务执行完毕!');
});

var j_2 = schedule.scheduleJob('00 35 22 * * *', function(){
    sendMail_2();
  console.log('定时任务执行完毕!');
});

下面是页面的样式:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div style="border: 0px solid red; width: 100%; margin: 40px auto; color: gray; text-align: center; font-size: 20px;" align="center">
            <span>我们已经生活了</span>
            <span style="font-size: 24px; color: red;">{{dayData.count}}</span>
            <span></span>
        </div>
        
        <div style="border: 0px solid red; width: 100%; margin: 0 auto; color: gray; text-align: center;">
            <img src="{{mojiData.icon}}"
             style="background: royalblue;"
             alt="天气图标"
             >
            <b style="display: block; color: black; font-size: 24px; margin: 15px 0;">
                 天气:{{mojiData.weather}}
            </b>
            <span style="display: block; color: black; font-size: 22px; margin: 15px 0;">
                温度:{{mojiData.wendu}}
            </span>
            <span style="display: block; color: lightgray; font-size: 20px;">
                提示:{{mojiData.tips}}
            </span>
        </div>
        
        <div style="text-align: center;margin: 35px 0;">
            <span style="display: block; margin-top: 55px;color: gray; font-size: 15px;">
                ONE 一个
            </span>
            
            <span style="display: block; margin-top: 25px;color: lightgray; font-size: 22px;">
                {{dayData.format}}
            </span>
            
            <img src="{{oneData.img}}"
                style="margin-top:10px; width: 100%;"
                alt="One配图"
             >
            <div style="margin: 10px auto; width: 85%; color: gray;">
                 {{oneData.text}}
            </div>
        </div>
    </body>
</html>

每天都要照顾好自己。

posted @ 2019-11-02 15:28  Nevesettle  阅读(551)  评论(0编辑  收藏  举报