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

背景

平时给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 嘿嘿,其实主要是为了学习。

看到标题 强迫症要犯了

回到顶部

AltStyle によって変換されたページ (->オリジナル) /