查看: 1093|回复: 13

[其他] Node每天定时给女朋友发邮件 明天天气和在一起多少天

[复制链接]
发表于 2021-3-29 21:59 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

话不多说上代码,一共有三部分操作.

1、创建app.js 输入代码
2、npm install安装所需要的依赖
3、node app.js运行脚本

统一回复 对象楼主不包分配 请自己new Object()

引用了一个png图片
155029kebejezeceqqi64a.png


最终效果图
155057zrcz0mkiihsassk0.jpg

[mw_shl_code=xml,true]
[md]//引用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('YYYY-MM-DD')
    //认识的天数
    const count = Math.floor((today - meet) / 1000 / 60 / 60 / 24)
    //今天的日期
    const format =
      today.getFullYear() +
      ' / ' +
      (today.getMonth() + 1) +
      ' / ' +
      today.getDate()
    const dayDate = {
      count,
      format,
    }
    resolve(dayDate)
  })
}
// getDate()

//请求墨迹天气的数据
function getMojiData() {
  return new Promise((resolve, reject) => {
    request
      .get('http://tianqi.moji.com/tommorrow/china/zhejiang/taizhou')
      .end((err, res) => {
        if (err) return console.log('数据请求失败')
        const $ = cheerio.load(res.text)
        //温度
        const wendu =
          $('.detail_weather em:eq(0)').text() +
          '-' +
          $('.detail_weather em:eq(1)').text()
        //天气
        const weather = $('.detail_weather span').text()
        //提示
        const tips = $('.detail_ware_title span').text()
        //墨迹对象
        const mojiData = {
          weather,
          wendu,
          tips,
        }
        resolve(mojiData)
      })
  })
}
// getMojiData()

//请求One页面抓取数据
function getOneData() {
  return new Promise((resolve, reject) => {
    request.get('http://wufazhuce.com/').end((res, err) => {
      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)
    })
  })
}

// getOneData()

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

// renderTemplate();

async function sendMail() {
  const { html, mojiData } = await renderTemplate()

  let transporter = nodemailer.createTransport({
    host: 'smtp.126.com',
    port: 465,
    secure: true, // true for 465, false for other ports
    auth: {
      user: '12345@126.com', // 你的邮箱账号
      pass: '12345', //你的邮箱密码
    },
  })

  // send mail with defined transport object
  let mailOptions = {
    from: '"帅气的开发者" <12345@126.com>', // 你的邮箱发件人及地址
    to: 'xxxxxx@qq.com', // 对象的邮箱地址
    subject: `温度:${mojiData.wendu} 天气:${mojiData.weather}`, // 副标题
    html: html, // html主体文件
  }

  transporter.sendMail(mailOptions, (error, info = {}) => {
    if (error) {
      sendMail()
    }
    console.log('发送成功', info.messageId)
    console.log('等待下一次发送!')
  })
}
// sendMail()
//定时任务,每天晚上九点.
var j = schedule.scheduleJob('0 0 21 * * *', function () {
  sendMail()
  console.log('定时任务执行完毕!')
})[/mw_shl_code]
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-3-29 22:08 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-29 22:16 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-29 22:18 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-29 22:38 | 显示全部楼层

支持楼主,谢谢分享。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-29 23:00 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-30 01:03 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-30 03:18 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-30 04:56 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-30 08:42 | 显示全部楼层
一定支持,谢谢大佬的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部