node.js爱心邮件
一.用的软件是VsCode:下载地址:https://code.visualstudio.com/
二.用的是node.js完成:下载地址:http://nodejs.cn/download/
无脑下一步安装即可,如果还是不会,可以进入该网址查看:https://www.runoob.com/nodejs/nodejs-install-setup.html
node.js需要配置环境变量:这我就不多说了,自己百度。
三.创建项目
随便创建一个文件夹,右键使用vscode打开
1.在资源管理器下边空白处右键打开终端输入:npm init -y 初始化项目
2.如果没安装:npm命令的可以进入该网站查看:https://www.runoob.com/nodejs/nodejs-npm.html
该网站中还有node.js的一个常用web框架模块 express 的npm安装方法,在这里我们就不用他的框架了。
我们只需要导入5个依赖即可。
3.下载依赖包:
art-template:模板引擎
cheerio:解析html
node-schedule:定时任务
nodemailer:发送电子邮件
superagent:http请求
npm命令:npm i art-template cheerio node-schedule nodemailer superagent
4.新建一个html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>mail</title>
</head>
<body style="margin: 0px;padding: 0px;">
<div style="text-align: center">
<p>今天是我们在一起的第
<span>
{{dayData.count}}
</span>
天
</p>
<img style="background: cornflowerblue" src="{{mojiData.icon}}" alt="天气图标">
<h3>
天气:
<span>
{{mojiData.weather}}
</span>
</h3>
<p>
温度:
<span>
{{mojiData.temperature}}
</span>
</p>
<p>
提示:
<span>
{{mojiData.hint}}
</span>
</p>
<p>
ONE · 一个
</p>
<P>
{{ dayData.format }}
</P>
<div style="border: 1px solid red">
<img src="{{one.image}}" alt="图片" width="100%">
</div>
<p>
{{one.text}}
</p>
</div>
</body>
最终邮件显示就是这样的:

5.该页面上显示的所有变化信息都是通过抓取墨迹天气和one一个网站的数据
墨迹天气网址:https://tianqi.moji.com/weather/china/hebei/zhangjiakou
one一个网址:http://wufazhuce.com/
抓取数据是靠要抓取信息在网页中的选择器抓取的。
注:在测试期间可在终端运行代码查看:命令:node js文件名
6.新建ji文件
6.1.计算认识的天数:可以打开:console.log(dayData);和调用方法进行测试,其他方法一样.
//1.0计算爱人认识的天数
function getDayDate(){ return new Promise((resolve,reject) =>{
//现在的时间
const today = new Date();
//认识的时间
const meet = new Date('2019-06-1');
//计算像是到几天的天数
//时间戳转换成天在向上取整
const count = Math.ceil((today - meet) / 1000 / 60 / 60 / 24);
//日期的格式化
const format = today.getFullYear() + '/' + (today.getMonth() + 1) + '/' + today.getDate(); const dayData = {
count,
format
} // console.log(dayData);
resolve(dayData);
}) }
// getDayDate();
6.2.抓取墨迹天气数据
//2.0 引入superagent 包,用于服务器发送http请求
const request = require('superagent'); //引入cheerio 包 用于把字符串解析成html
const cheerio = require('cheerio'); //请求墨迹天气获取数据
function getMojiData(){ return new Promise((resolve,reject) =>{
request.get('https://tianqi.moji.com/weather/china/hebei/zhangjiakou').end((err,res)=>{
if(err) return console.log("数据请求失败,请检查路径");
//console.log(res.text);
//把字符串转换城html,并可用 jQuery核心选择器湖区内容
const $ = cheerio.load(res.text);
//图标
const icon = $('.wea_weather span img').attr('src');
//天气
const weather = $('.wea_weather b').text();
//温度
const temperature = $('.wea_weather em').text();
//提示
const hint = $('.wea_tips em').text(); const mojiData = {
icon,
weather,
temperature,
hint
}
// console.log(mojiData);
resolve(mojiData); })
}) }
// getMojiData();
6.3.抓取one页面数据
//3.0 请求one页面抓取数据
function getOne(){ return new Promise((resolve,reject) =>{
request.get('http://wufazhuce.com/').end((err,res)=>{
if(err) return console.log("数据请求失败,请检查路径");
//把返回值中的页面解析成html
const $ = cheerio.load(res.text);
//抓取图片
const image = $('.carousel-inner>.item>img, .carousel-inner>.item>a>img').eq(0).attr('src');
//抓取文本
const text = $('.fp-one .fp-one-cita-wrapper .fp-one-cita a').eq(0).text(); const one = {
image,
text
} // console.log(one);
resolve(one); })
}) } // getOne();
6.4.通过模板引擎引起替换html数据
//4.0
//引入模板引擎
const template = require('art-template');
//导入 path 模块路径
const path = require('path'); //通过模板引起替换 heml 的数据
async function renderTemplate(){
//获取 日期
const dayData = await getDayDate();
//获取 墨迹天气数据
const mojiData = await getMojiData();
//获取 one数据
const one = await getOne(); // console.log(dayData);
// console.log(mojiData);
// console.log(one); //所有数据都获取成功时,进行模板引擎数据的替换
return new Promise((resolve,reject)=>{
const html = template(path.join(__dirname,'./love.html'),{
dayData,
mojiData,
one
});
resolve(html);
});
} // renderTemplate();
6.5.发送邮件:测试完之后可以进入邮箱查看一下哟!
//5.0
//导入邮箱依赖
const nodemailer = require("nodemailer");
//发送邮件
async function sendNodeMain(){ //html页面内容
const html = await renderTemplate();
console.log(html);
//使用默认smtp传输,创建可重用邮箱对象
let transporter = nodemailer.createTransport({
host: "smtp.qq.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: "577808444@qq.com", // generated ethereal user
pass: "pmznunfrpgzqbdcg" // generated ethereal password
}
}); // 使用定义的传输对象发送邮件
let mailOptions = {
from: '"帅气的小哥哥" <@qq.com>', // 发件人
to: "315391975@qq.com", // 收件人邮箱列表
subject: "爱的邮件", // 标题
html: html // html 内容
}; transporter.sendMail(mailOptions,(error,info = {})=>{
if(error){
console.log(error);
sendNodeMain();//再次发送
}
console.log("邮件发送成功",info.messageId);
console.log("静等下一次发送");
});
} // sendNodeMain();
6.6.定时发送邮件
//6.0
//定时每天发送邮件 每天8时13分14秒
//导入node-schedule包
const schedule = require('node-schedule'); const j = schedule.scheduleJob('14 13 08 * * *', function(){
sendNodeMain();
console.log('邮件已发送');
});
好了,这就搞定了。
node.js爱心邮件的更多相关文章
- Node.js定时邮件的那些事儿
近开发一个项目,需要在Node.js程序里实现定期给管理员发邮件的功能. 笔者平时只会在Web界面收发邮件.对邮件的原理完全不懂(可能大学教过,然而全忘了),直到要解决这个问题.请教了几个业务的同事, ...
- node.js发邮件
在node上使用第三方类库(nodemailer)发邮件是一件很esay的事情:) app.js 以QQ邮箱为例 var nodemailer = require('nodemailer'); v ...
- 转:Node.js邮件发送组件- Nodemailer 1.0发布
原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...
- node.js爬取数据并定时发送HTML邮件
node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...
- 使用Node.js还可以发邮件
前言 今天,我们给大家开发一个小效果.篇幅比较短,主要给大家展示效果.实战 首先我们初始化一个Node项目 npm init -y 创建一个app.js文件 'use strict'; const n ...
- 用Node.js发送邮件
本文讲的是用Node.js通过一个开启smtp的已有的邮箱账号发送邮件,而不是如何创建一个邮件服务器 开启smtp服务 首先要去要使用的邮箱中设置开启smtp,才能正常发送邮件 这边以163邮箱为例 ...
- node.js + webstorm :配置开发环境
一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...
- Node.js入门:包结构
JavaScript缺少包结构.CommonJS致力于改变这种现状,于是定义了包的结构规范(http://wiki.commonjs.org/wiki/Packages/1.0 ).而NPM的 ...
- 8 步搭建 Node.js + MongoDB 项目的自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...
随机推荐
- 第一章、ssh安装及远程登入配置
1.Ubuntu下 确认 SSH Server 是否启动 输入: sudo ps -e | grep ssh. 如果正确启动, 命令行中会显示sshd. 安装服务端 OpenSSH Server 输入 ...
- Vue + Webpack 根据不同环境打包
修改 prod.env.js // 当前正在运行的脚本名称 const TARGET = process.env.npm_lifecycle_event // 第一个参数 let argv = pro ...
- 使用zabbix server监控tomcat实战案例
使用zabbix server监控tomcat实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道,zabbix server效率高是使用C语言编写的,有很多应用程序 ...
- 51nod 1433:0和5
1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 取消关注 小K手中有n张牌,每张牌上有一个一位数的数, ...
- 用JS写一个网站树形菜单
先上效果图: 主体内容就是侧边展示的一二三级菜单,树形结构的. 前端页面布局内容,页面内容简单用ul li 来完成所有的罗列项.用先后顺序来区分一级二级三级: <body> <b&g ...
- decompiler of java
运维了两个java项目,但是没有源代码,整天都是各种问题,各方面都不配合.我也只是个小小的兵,但是工作还是要做. 转机 偶然想试一试decomplier,就找到了gd-gui,感觉用着挺好的,到把项目 ...
- markdown超链接怎么写?
效果:我的微博 #上面的效果就是下面这种写法: [ 我的微博 ]( http://weibo.com/5833683560/profile?topnav=1&wvr=6&is_all= ...
- php笔记04
PHP+MySQL 连接数据库 mysqli <?php $servername="localhost"; $username="root"; $pass ...
- C++ 根据日期判断星期几
int CaculateWeekDay(int y,int m, int d) { ||m==) { m+=; y--; } *m+*(m+)/+y+y/-y/+y/)%; ; }
- CentOS 6.8 32位 安装mysql8
1.清理掉之前安装过的mysql rpm -qa | grep mysql mysql-libs-5.1.52-1.el6_0.1.x86_64 yum remove mysql-libs-5.1.5 ...