CNode

node实现发送书籍到kindle

分享
Kkejunliang发布于8 年前最后回复8 年前7 回复4505 浏览0 收藏

背景

平时给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)

U
ugrg#1·8 年前

好东西.

不过,为什么不装个Foxmail?

I
i5ting#2·8 年前
引用 ugrg好东西. 不过,为什么不装个Foxmail?

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

I
i5ting#3·8 年前

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

K
kejunliang#4·8 年前
引用 i5ting封装一个命令行cli工具,非常实用,棒棒哒

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

K
kejunliang#5·8 年前
引用 ugrg好东西. 不过,为什么不装个Foxmail?

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

I
IAMLETOEY#6·8 年前

看到标题 强迫症要犯了

Y
ycjcl868#7·8 年前

已经有人写过了: https://www.npmjs.com/package/kindle

参与回复
登录后即可参与回复。登录