var { domain_id, getToken, customeId, httprequest } = require("./httprequest") var querystring = require('querystring'); Date.prototype.Format = function (fmt) { var o = { 'M+': this.getMonth() + 1, 'd+': this.getDate(), 'H+': this.getHours(), 'm+': this.getMinutes(), 's+': this.getSeconds(), 'S+': this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+”给date.getFullYear()+'',加一个空字符串便可以将number类型转换成字符串。 fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()),这种更容易理解。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length))); } } return fmt; }; Date.prototype.DateAdd = function(strInterval, Number) { var dtTmp = this; switch (strInterval) { case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number)); case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number)); case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number)); case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number)); case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number)); case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); } } function addTask(tempId, poolId, taskname, callBackFunc,errCallFunc) { var url = "http://edmapi.rushmail.com/api.php?module=wc-task&action=task-add"; var template_id = tempId var task_name = taskname var count_preset = 1; var time_preset = ""; var email_domain_id = domain_id; var email_id = 0; var reply_to = "test@suport.tai-online.com" var track = 1; var status = -9; var pdata = { token: getToken(), customer_id: customeId, template_id: template_id, pool_id: poolId, task_name: task_name, count_preset: count_preset, time_preset: time_preset, email_domain_id: email_domain_id, email_id: email_id, email_addr: "test@suport.tai-online.com", reply_to: "test@tai-online.com", track: track, status: status } var post_data = querystring.stringify( pdata ) httprequest(url, post_data, function (ret) { if (ret.code == "success") { console.log("邮件任务添加成功 taskId:", ret.status) var taskId = ret.status; // 248596; if (callBackFunc) callBackFunc(taskId) } else { console.log("邮件任务添加失败", ret.message) if(errCallFunc){ errCallFunc("邮件任务添加失败") } } },errCallFunc) } function startSendEmail(taskId, callbackFunc,errCallBack) { var url = 'http://edmapi.rushmail.com/api.php?module=wc-task&action=task-start'; var data = { token: getToken(), customer_id: customeId, task_id: taskId }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.code == "success") { console.log("邮件发送成功"); if (callbackFunc) callbackFunc(taskId); } else { console.log("邮件发送失败", ret.message); if(errCallBack){ errCallBack("邮件发送失败") } } },errCallBack) } function getTaskList(callbackFunc) { var url = "http://edmapi.rushmail.com/api.php?module=wc-task&action=task-list"; var data = { token: getToken(), customer_id: customeId, page: 1, limit: 100 }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { console.log("发送任务获取成功"); if (callbackFunc) callbackFunc(ret.data.task_list.list); } else { console.log("发送任务获取失败", ret); } }) } function getTask(task_id, template_id, pool_id, task_name, count_preset, count_send, time_preset, time_start, email_did, email_id, email_addr, reply_to, track, status, callbackFunc) { var url = "http://edmapi.rushmail.com/api.php?module=wc-task&action=task-view"; var data = { token: getToken(), customer_id: customeId, task_id: task_id, template_id: template_id, pool_id: pool_id, task_name: task_name, count_preset: count_preset, count_send: count_send, time_preset: time_preset, time_start: time_start, email_did: email_did, email_id: email_id, email_addr: email_addr, reply_to: reply_to, track: track, status: status }; // task_id:任务 id  template_id:模板 id //  pool_id:地址池 id //  task_name:任务名称 //  count_preset:预定数量 //  count_send:已发数量 //  time_preset:预定时间 //  time_start:开始时间 //  email_did:发送域名 id //  email_id:发送邮箱帐号 id //  email_addr:发送邮箱帐号 如果是全部帐号 此项为* //  reply_to:邮件回复地址 //  track:跟综统计 // 0 不使用 1 跟踪打开率 2 跟踪打开率和点击率 //  status:-1 暂不发送 0 等待发送 1 正在发送 2 发送完成 3 暂停发送 4 取消发送 var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { console.log("查看任务成功"); if (callbackFunc) callbackFunc(); } else { console.log("查看任务失败", ret); } }) } function delTask(taskId, callbackFunc) { var url = "http://edmapi.rushmail.com/api.php?module=wc-task&action=task-delete" var data = { token: getToken(), customer_id: customeId, task_id: taskId }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { console.log("删除任务成功"); if (callbackFunc) callbackFunc(); } else { console.log("删除任务失败", ret); } }) } function getTrackView(date, callbackFunc) { var url = "http://edmapi.rushmail.com/api.php?module=track&action=smtp-overview"; var data = { token: getToken(), customer_id: customeId, date: date }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { console.log("获取跟踪数据"); if (callbackFunc) callbackFunc(ret); } else { console.log("获取跟踪数据失败", ret); } }) } /** * 跟踪统计概况 * @param {*} taskId */ function getTrackByTaskIdAsync(taskId){ return new Promise(function (resolve, reject) { getTrackByTaskId(taskId, function (ret) { resolve(ret); }, function (e) { reject(e) }); }) } function getTrackByTaskId(taskId,callBackFunc,errCallBackFunc){ var url="http://edmapi.rushmail.com/api.php?module=track&action=overview"; var data = { token: getToken(), customer_id: customeId, task_id: taskId }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { // console.log("获取跟踪数据"); if (callBackFunc) callBackFunc(ret); } else { // console.log(ret.message); if (callBackFunc) callBackFunc(ret); } },errCallBackFunc) } /** * 发送任务报告 异步 * @param {*} date * @param {*} callbackFunc */ function getTaskReport(date, callbackFunc,errCallBack) { var url = "http://edmapi.rushmail.com/api.php?module=report&action=task-list"; var data = { token: getToken(), customer_id: customeId, date: date }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { console.log("获取发送任务统计数据成功"); if (callbackFunc) callbackFunc(ret.data.task_list); } else { console.log("获取发送任务统计数据失败", ret); if(errCallBack){ errCallBack("获取发送任务统计数据失败"+ret.message) } } },errCallBack) } function getFailType(task){ if(task.failure3_count>0)return {id:3,msg:"对方拒收"}; if(task.failure2_count>0)return {id:2,msg:"空间不足"}; if(task.failure1_count>0)return {id:1,msg:"地址无效"}; return {id:0,msg:"正常"}; } /** * 查询报告 * @param {*} date */ async function getTaskReportInfoAsync(date){ var tasks=await getTaskReportAsync(date); var tasklist=[]; for(var task of tasks){ var fail=getFailType(task); var wctask_id=task.wctask_id; var trackInfo=""; var isOpen=false; // console.log(task) if(fail.id ==0 && wctask_id>0){ trackInfo= await getTrackByTaskIdAsync(wctask_id); // console.log(trackInfo) if(trackInfo.status){ if(trackInfo.data.open_unique>0 || trackInfo.data.open_total>0){ isOpen=true; } } } var t={task_id:wctask_id,sent:task.receive_count,fail:fail.id,msg:fail.msg,isOpen:isOpen} tasklist.push(t); } return tasklist; } async function getTaskReportInfoWeekAsync(date){ var datelist=[]; // console.log("getTaskReportInfoWeekAsync",date) for(var i=0;i<7;i++){ var newDate=date.DateAdd("d",-i); console.log(newDate); datelist.push(newDate.Format("yyyy-MM-dd")); } var tasklist=[]; for(var d of datelist){ var tasks=await getTaskReportAsync(d); for(var task of tasks){ var fail=getFailType(task); var wctask_id=task.wctask_id; var trackInfo=""; var isOpen=false; // console.log(task) if(fail.id ==0 && wctask_id>0){ trackInfo= await getTrackByTaskIdAsync(wctask_id); // console.log(trackInfo) if(trackInfo.status){ if(trackInfo.data.open_unique>0 || trackInfo.data.open_total>0){ isOpen=true; } } } var t={task_id:wctask_id,sent:task.receive_count,fail:fail.id,msg:fail.msg,isOpen:isOpen} tasklist.push(t); } } return tasklist; } /** * 发送任务报告 同步 * @param {*} date */ var getTaskReportAsync=async function(date){ return new Promise(function (resolve, reject) { getTaskReport(date, function (ret) { resolve(ret); }, function (e) { reject(e) }); }) } /** * 获取跟踪数据 * @param {*} track_id * @param {*} callbackFunc */ function getTrack(track_id, callbackFunc, errCallBack) { var url = "http://edmapi.rushmail.com/api.php?module=track&action=detail"; var data = { token: getToken(), customer_id: customeId, track_id: track_id }; var post_data = querystring.stringify(data) httprequest(url, post_data, function (ret) { if (ret.status) { // console.log("获取跟踪数据成功"); if (callbackFunc) callbackFunc(ret); } else { console.log("获取跟踪数据成功数据失败", ret); if (errCallBack) { errCallBack(ret); } } }, errCallBack); } /** * 通过跟踪编号得到跟踪信息 * @param {*} track_id */ var getTrackAsync = async function (track_id) { return new Promise(function (resolve, reject) { getTrack(track_id, function (ret) { resolve(ret); }, function (e) { reject(e) }); }) } exports.addTask = addTask; exports.startSendEmail = startSendEmail; exports.getTaskList = getTaskList; exports.getTask = getTask; exports.getTrackView = getTrackView; exports.getTaskReport = getTaskReport; exports.getTaskReportInfoAsync=getTaskReportInfoAsync; exports.getTaskReportInfoWeekAsync=getTaskReportInfoWeekAsync; exports.getTrack = getTrack; exports.getTrackAsync = getTrackAsync;