Contents

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

})