發送多封不同對象的EMail時, 因為EMail發送為非同步的機制, 所以這裡要採用一個 async非同步機制來執行, 可以透過Server端infoMail這個組件來發送eMail, 如下的範例, 其中, 可透過InfoMail.htmlrow()以網格形式來輸出欄位內容到Email內容中:
exports.doSendMails = function(param,callback){
this.echo('do send mail begin');
var yymm = param.yymm; // 取得薪資發放月份
var co = param.co; //取得子公司
var dm = this;
var async = this.getModule('async'); // 改用新的方式來引用 async 非同步模組
this.getComponent('InfoMail1','infomail',function(err,mail){
var sql = "SELECT A.薪資年月,A.員工編號,A.部門,A.姓名,A.子公司,A.實發薪資,B.電子郵件 FROM 薪資發放作業 A,員工資料表 B";
sql = sql + " WHERE A.員工編號=B.員工編號 AND (B.電子郵件 IS NOT NULL AND B.電子郵件<>'') AND A.薪資年月='"+ yymm +"' AND A.子公司='"+ co +"'"; //取得當月員工薪資資料
dm.queryRaw(dm.clientInfo, dm.clientInfo.database, sql, {},function(err, rows) {
if(err){
callback(err);
}
else{
async.eachSeries(rows,function(row,cb){
dm.echo(row.電子郵件);
var subject = yymm+"月份薪資發放通知";
var table1 = mail.HtmlRow(row, [{ field: '薪資年月', title: '薪資年月'},{ field: '員工編號', title: '員工編號'},{ field: '姓名', title: '姓名'},{ field: '子公司', title: '子公司'},{ field: '部門', title: '部門'},{ field: '實發薪資', title: '實發薪資'}]);
var param = {'subject':subject,'to':row.電子郵件,'body':table1};
mail.Send(param,cb); // 發送郵件
},callback);
}
});
});
};