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

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>

每天都要照顾好自己。

Node.js 应用---定时给自己发送邮件的更多相关文章

  1. node.js爬取数据并定时发送HTML邮件

    node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...

  2. Node.js定时邮件的那些事儿

    近开发一个项目,需要在Node.js程序里实现定期给管理员发邮件的功能. 笔者平时只会在Web界面收发邮件.对邮件的原理完全不懂(可能大学教过,然而全忘了),直到要解决这个问题.请教了几个业务的同事, ...

  3. 用Node.js发送邮件

    本文讲的是用Node.js通过一个开启smtp的已有的邮箱账号发送邮件,而不是如何创建一个邮件服务器 开启smtp服务 首先要去要使用的邮箱中设置开启smtp,才能正常发送邮件 这边以163邮箱为例 ...

  4. Node.js发送邮件

    1.使用nodemailer模块 var nodemailer = require("nodemailer"); 2.代码如下 exports.send_email = funct ...

  5. Node.js使用Nodemailer发送邮件

    除了Python,在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用.Nodemailer包就可以帮助我们快速实现发送邮件的功能. Nodemailer简介 Nodem ...

  6. node.js 模拟自动发送邮件验证码

    node.js 模拟自动发送邮件验证码 引言 正文 1. QQ邮箱设置 2. 安装nodemailer 3.配置信息 4.综合 5.讲解 结束语 引言 先点赞,再看博客,顺手可以点个关注. 微信公众号 ...

  7. node.js爱心邮件

    一.用的软件是VsCode:下载地址:https://code.visualstudio.com/ 二.用的是node.js完成:下载地址:http://nodejs.cn/download/ 无脑下 ...

  8. Node.js入门

    开始之前,安利一本正在看的书<站在两个世界的边缘>,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间.OK,有兴趣的可以看一看. node.js如标题一样,我也是刚开始接触,大家一起 ...

  9. [译]Node.js Interview Questions and Answers (2017 Edition)

    原文 Node.js Interview Questions for 2017 什么是error-first callback? 如何避免无止境的callback? 什么是Promises? 用什么工 ...

随机推荐

  1. 解决SSH显示中文乱码的问题(cent os7)

    用SSH连接服务器显示中文乱码,试过修改SSH端,不成功.这次从服务器端下手 1.先查看服务器现有的字符集 [root@dm01 ~]# locale -a 在结果中找到 如果没有支持的字符集就需要安 ...

  2. p5.js基本[一] T型高斯分布的小星星

    样例 <script src="./p5/p5.js"></script> <script> function setup() { // 只写一 ...

  3. Vue 组件化开发之插槽

    插槽的作用 相信看过前一篇组件化开发后,你对组件化开发有了新的认识. 插槽是干什么的呢?它其实是配合组件一起使用的,让一个组件能够更加的灵活多变,如下图所示,你可以将组件当作一块电脑主板,将插槽当作主 ...

  4. mybatis 多数据源动态切换

    笔者主要从事c#开发,近期因为项目需要,搭建了一套spring-cloud微服务框架,集成了eureka服务注册中心. gateway网关过滤.admin服务监控.auth授权体系验证,集成了redi ...

  5. jquery 的 change() 方法的使用

    w3c 中的定义:链接  <a>http://www.w3school.com.cn/jquery/event_change.asp<a> jQuery 事件 - change ...

  6. Linux 入侵痕迹清理技巧

    清除history历史命令记录 vim ~/.bash_history //编辑history记录文件,删除部分不想被保存的历史命令 history -c //清除当前用户的history命令记录 H ...

  7. Maven一定要会的这几个知识!

    一.Maven概念 Maven是一个项目管理和整合工具.Maven为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为Maven使用了一个标准的目 ...

  8. 硕思logo设计师注册码去哪里找

    硕思logo设计师注册码去哪里找呢?当然是硕思logo设计师官网啦! 最近小编总是会被网友们咨询关于logo设计的问题,其中很多网友并不是专业的设计人员,特别是一些设计公司面对新手设计时,往往会不知所 ...

  9. 如何使用系统清理缓存软件优化MacBook

    在我们使用我们的Mac一定的时间后,总是不可避免的出现Mac内存不足的情况,所以清理垃圾软件也就成为了我们电脑里必不可少的软件.苹果软件商店中有很多各有不同的清理垃圾软件,但我们往往很难从这一大堆软件 ...

  10. Java命令行启动jar包更改默认端口以及配置文件的几种方式

    Java命令行启动jar包更改默认端口以及配置文件的几种方式 java -jar xxx.jar --server.port=8081 默认如果jar包没有启动文件,可以采用这种方式进行启动 java ...