程式狂想筆記

一個攻城師奮鬥史

0%

使用nodemailer做批次寄信

由於之前工單信件寫錯…
需要補寄信件給使用者
今天研究nodejs使用nodemailer發信
發現真的還滿簡單好用
說不定下次就有機會可以用到

nodemailer

malagege/sample-code-node-mail-batch: 批次發信範例

可注意(1)(2)(3)要改的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/////////(1)
const csvFilePath='data.csv'
var mail_from = 'from@xxxx.com.tw'
var subject = '標題'


var nodemailer = require('nodemailer');
const csv=require('csvtojson')
/////////(2)
var transporter = nodemailer.createTransport({
host: 'mail_server_url',
port: 25 ,
secure: false,
auth: {
user: 'from@xxxx.com.tw',
pass: 'password'
}
});
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
// console.log(jsonObj);
/**
* [
* {a:"1", b:"2", c:"3"},
* {a:"4", b:"5". c:"6"}
* ]
*/

jsonObj.forEach(data => {
/////////(3)
let mail_to = data.usermail
let email_template = `
Hello World!!!!
<img src="${data.pic_url}"><br>
姓名:${data.username}<br>
訂單編號:${data.no}<br>
`

var mailOptions = {
from: mail_from,
to: mail_to, //寄送人
subject: subject,
html: email_template,
};


// verify connection configuration
// transporter.verify(function(error, success) {
// if (error) {
// console.log(error);
// } else {
// console.log('Server is ready to take our messages');
// }
// });

transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.log('mail_to:' + mail_to)
console.log(error);
} else {
console.log(mail_to + ' , Email sent: ' + info.response);
}
});

});

})

另外,附加檔案可以參考sample-code-node-mail-batch/test_add_file.js at master · malagege/sample-code-node-mail-batch

程式參考來源:
Nodejs发邮件组件Nodemailer | 粉丝日志 備份圖

preview-email

https://www.npmjs.com/package/preview-email

可以簡單看預覽信件內容
雖然我覺得可以用寫死一個信箱看…
缺點好像附加檔案cid會抓不到

1
2
3
4
const previewEmail = require('preview-email');
...
previewEmail(message).then(console.log).catch(console.error);
//transport.sendMail(message).then(console.log).catch(console.error);

message跟nodemailer搭配

最後,email-templates我就沒研究了
看了文件感覺很複雜
我就先用程式邏輯就可以跑出我想要的