node实现发送书籍到kindle
发布于 6 年前 作者 kejunliang 3520 次浏览 来自 分享

背景

平时给kinddle里面发送书籍都是通过邮件发送,每次都是打开浏览器上传附件等待…然后点击发送,时间久了就讨厌这种无聊的操作了,然后没事干就用node写了一个程序可以自动将本地目录下的文件自动发送到kinddle邮箱。

具体过程

创建一个目录来存放程序,凭自己的喜好啦。

  • 用命令行进入到新建的目录下安装邮件中间件,安装完成后可以看到多出一个文件夹

npm install nodemailer

  • 创建发送的代码,这个是主程序,里面分了三个部分。

    1. 获取附件
    2. 发送邮件
    3. 删除发送成功的附件
var nodemailer = require('nodemailer');  
var files=require("./getdir");
//读取文件完毕后发送邮件
var lists=files  //接收返回的附件数组信息
lists.then(function(arr){
     var AttArrObj=[];
     for(var i=0;i<arr.length;i++){
      var attobj=new Object();
      var filearr=arr[i].split("/");
      var filename=filearr[filearr.length-1]
      attobj.filename=filename
      attobj.path=arr[i];
      attobj.cid="kinddle"+i;
      AttArrObj.push(attobj)
     }
     console.log(AttArrObj)
     //导出后发送邮件
     var transporter = nodemailer.createTransport({  
      service: '126',  
      auth: {  
        user: '###@126.com',  
        pass: '###' //授权码,通过126 这里直接取126网站获取 
      
      }  
      });  
      var mailOptions = {  
        from: '###@126.com', // 发送者  
        to: '###@126.com,###@kindle.cn,###@kindle.cn', // 接受者,可以同时发送多个,以逗号隔开  
        subject: 'kinddle', // 标题  
        //text: 'Hello world', // 文本  
        html: `kinddle电子书`   ,
        attachments: AttArrObj   //附件信息
    
      };  
      
      transporter.sendMail(mailOptions, function (err, info) {  
        if (err) {  
          console.log(err);  
          return;  
        }  
      
        console.log('发送成功'); 
        //发送成功后删除目录下的所有文件
        var deletefiles=require("./getdirdelete");
      });  

 })

*获取附件

  var fs=require("fs");
var path="F:\kiddle";

function getfiles(path){
  return new Promise(function(resolve,reject){
    fs.readdir(path,function(err,files){
        if(err){
            console.log('error:\n' + err);
            resolve(err);
        }
        var arr=[];
        files.forEach(function(file){
            console.log('文件名:' + path + '/' + file);
            console.log(arr)
            arr.push(path + '/' + file)
            console.log(arr)
        })
        resolve(arr)
    })
  })
}

console.log(11)
var list=getfiles(path)
module.exports=list

// list.then(function(arr){
//     console.log("导出=="+arr)
//     exports.files=arr

// })

*删除附件

var fs=require("fs");
var path="F:\kiddle";

function getfiles(path){
  return new Promise(function(resolve,reject){
    fs.readdir(path,function(err,files){
        if(err){
            console.log('error:\n' + err);
            resolve(err);
        }
        var arr=[];
        files.forEach(function(file){
          
            console.log('清除文件名开始:' + path + '/' + file);
            fs.unlinkSync(path + '/' + file);
            console.log('清除文件名:' + path + '/' + file);
        })
        resolve(arr)
    })
  })
}

var list=getfiles(path)
module.exports=list

// list.then(function(arr){
//     console.log("导出=="+arr)
//     exports.files=arr

// })
  • 执行 node 主方法即可。
7 回复

好东西.

不过,为什么不装个Foxmail?

@ugrg 程序员要有程序员的方式,棒棒哒

封装一个命令行cli工具,非常实用,棒棒哒

@i5ting 多谢建议,后期计划准备做个界面版然后用Electron打个包,弄成一个桌面应用的这样用起来更方便。

@ugrg 嘿嘿,其实主要是为了学习。

看到标题 强迫症要犯了

回到顶部