程式狂想筆記

一個攻城師奮鬥史

0%

maildev試用筆記

最近在FB社群看到有人分享fake stmp server
社群連結
之前有測試nodemailer
但是缺少附加檔案可以測試
preview-email - npm無法做到
想說測試這個能不能用

線上服務
Ethereal Email
Mailtrap.io — Fake smtp testing server. Dummy smtp email testing
不過…,這兩個不是這文章的重點

maildev 安裝

官網MailDev - Create better email during development寫了很清楚

npm安裝

1
2
$ npm install -g maildev
$ maildev

docker執行

1
2
$ docker pull djfarrelly/maildev
$ docker run -p 1080:80 -p 1025:25 djfarrelly/maildev

原始檔案暗樁

1
2
3
$ git clone git@github.com:djfarrelly/MailDev.git
$ npm install -g ./maildev
$ maildev

安全憑證記得要關掉

1
2
3
4
5
const transport = nodemailer.createTransport({
port: 1025,
ignoreTLS: true,
// other settings...
});

程式碼執行

malagege/sample-code-node-mail-batch: 批次發信範例test_add_file.js
修改
主要要特別注意

  • ignoreTLS: true
  • auth要拿掉
  • cid 在多個寄信的時候會在寄信的時候會有問題….
    明明個別設定1.jpg,2.jpg,但是結果兩封信卻都是2.jpg
    最後用cid:00000001${data.img}方式解決…
    但感覺是maildev問題…

以下code也沒先commit到github上面

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
69
70
71
72
73
/////////(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: 'localhost',
port: 1025 ,
ignoreTLS: true,
// 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!!!!${data.img}
<img src="cid:00000001${data.img}"/><br>
姓名:${data.username}<br>
訂單編號:${data.no}<br>
`

let mailOptions = {
from: mail_from,
to: mail_to, //寄送人
subject: subject,
html: email_template,
attachments: [{
filename: data.img,
path: data.img,
cid: '00000001'+data.img
}]
};


// 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);
}
});

});

})