UNPKG

kpiplus

Version:

KPI+

1 lines 4.42 kB
var MailListener=require("mail-listener2"),Mailreceived=require("../models/mailreceived"),Mailaccount=require("../models/mailaccount"),User=require("../models/user"),Link=require("../models/link"),Customer=require("../models/customer"),Lienhe=require("../models/lienhe"),async=require("async"),underscore=require("underscore"),fs=require("fs"),dns=require("dns"),schedule=require("./schedule"),management=function(){this.accounts={}};management.prototype.start=function(){var e=this;Mailaccount.find({status:!0}).lean().exec(function(t,n){if(t)return console.log(t);n.forEach(function(t){t.id_app&&e.startAccount(t)})})},management.prototype.stopAccount=function(e,t){this.accounts[e._id.toString()]&&(this.accounts[e._id.toString()].stop(),delete this.accounts[e._id.toString()]),Mailaccount.findOne({_id:e._id.toString()},function(e,n){n?(n.error=null,n.status_string="Đã ngắt kết nối",n.status_code=0,n.save(function(e){e&&console.log(e),t&&t(e)})):t&&t(e)})},management.prototype.startAccount=function(e,t){if(e.imap&&e.imap.host){var n=this;dns.lookup(e.imap.host,function(a,i){if(a)return console.error(a);n.stopAccount(e,function(a){if(!a&&e.status){var i=new Date;i.setDate(i.getDate()-1);var o=new MailListener({username:e.username,password:e.password,host:e.imap.host,port:e.imap.port,tls:e.imap.tls,tlsOptions:{rejectUnauthorized:!1},mailbox:"INBOX",searchFilter:["ALL",["SINCE",i]],markSeen:!1,fetchUnreadOnStart:!0,mailParserOptions:{streamAttachments:!1},attachments:!0,attachmentOptions:{directory:"attachments/"}});o.start(),n.accounts[e._id.toString()]=o,o.on("server:connected",function(){Mailaccount.findOne({_id:e._id.toString()},function(e,t){t&&(t.error=null,t.status_string="Đang kết nối",t.status_code=1,t.save(function(e){e&&console.log(e)}))}),t&&t(null)}),o.on("server:disconnected",function(){Mailaccount.findOne({_id:e._id.toString()},function(e,t){t&&(t.error=null,t.status_string="Đã ngắt kết nối",t.status_code=0,t.save(function(e){e&&console.log(e)}))}),schedule.ConnectImapServer(e,1)}),o.on("error",function(n){Mailaccount.findOne({_id:e._id.toString()},function(e,t){t&&(t.error=n,t.status_string="Không thể kết nối",t.status_code=-1,t.save(function(e){e&&console.log(e)}))}),schedule.ConnectImapServer(e,10),t&&t(n)}),o.on("mail",function(t,n,a){t&&Mailreceived.findOne({messageId:t.messageId,id_app:e.id_app},{_id:1},function(n,a){if(!a){var i={account_id:e._id.toString(),subject:t.subject,date_created:t.receivedDate,user_created:e.user_created};if(i.date_updated=new Date,i.to=t.to,i.from=t.from,i.id_app=e.id_app,i.from.forEach(function(e){e.name||(e.name=e.address)}),i.mail={text:t.text,html:t.html},i.messageId=t.messageId,t.attachments&&(i.attachments=[],t.attachments.forEach(function(e){var t="attachments/"+e.contentId+"_"+e.fileName;underscore.isString(e.path)?(fs.createReadStream(e.path).pipe(fs.createWriteStream(t)),i.attachments.push({contentType:e.contentType,fileName:e.fileName,contentId:e.contentId,path:t})):console.log("attachment path",e.path)})),!t.text&&t.html){var o=t.html.replace(/<(?:.|\n)*?>/gm,"");i.mail.text=o}i.mail.text&&(i.mail.text.length>128?i.small_text=i.mail.text.substring(0,128)+"...":i.small_text=i.mail.text),new Mailreceived(i).save(function(e,t){if(e)return console.log(e);t&&(underscore.extend(i,t),c(t),async.map(t.from,function(e,t){async.parallel({contact:function(t){Lienhe.find({email:e.address,id_app:i.id_app}).lean().exec(function(e,n){n?async.map(n,function(e,t){new Link({id_app:i.id_app,collection_a:"lienhe",id_a:e._id,collection_b:"mailreceived",id_b:i._id}).save(function(e){e&&console.log(e),t()})},function(e,n){t()}):t()})},cust:function(t){Customer.find({email:e.address,id_app:i.id_app}).lean().exec(function(e,n){n?async.map(n,function(e,t){new Link({id_app:i.id_app,collection_a:"customer",id_a:e._id,collection_b:"mailreceived",id_b:i._id}).save(function(e){e&&console.log(e),t()})},function(e,n){t()}):t()})}},function(e,n){t(e,n)})},function(e,t){e&&console.log(t)}))})}})});var c=function(t){var n=new Date;if(n.setDate(n.getDate()-1),!(t.date_created.getTime()<n.getTime())){var a={};t.toObject?a=t.toObject():underscore.extend(a,t),a.code="mailreceived",a.action="view",a.title="Email mới từ "+(t.from[0].name?t.from[0].name:t.from[0].address),a.body=t.subject,User.emitEvent(e.user_created,"email",a)}};o.on("attachment",function(e){})}})})}},module.exports=management;