如何使用Express,Jade,Imap向NodeJ上的消息发送电子邮件附件

时间:2016-03-31 17:31:09

标签: javascript html node.js pug mime

我目前正在为我们的NodeJs应用程序开发电子邮件客户端。

我得到了一切工作,(列出消息,打开消息等......),除了附件。

我应该如何投放附件以便' cid:someId' 来源将其呈现到正确的位置。

我试图谷歌如何使用cid来源而不了解如何使用它们。

我可以在NodeJ上看到这样的消息附件:

attachments: [  
    {   
        contentType: 'image/jpg',
        filename: "somePicture.jpg",    
        contents: ""                  //BASE64 string
        cid: 'someId'
    }   
]

mailer.js

var Mailer = function() {
     this.getMessages = function(cb) {

         ------ IMAP MESSAGES READ ------
             cb(messages);
         ------ IMAP MESSAGES READ ------

     };
     this.getMessage = function(seqNo, cb) {

         ------ IMAP MESSAGE READ ------
             cb(messages);
         ------ IMAP MESSAGE READ ------

     };
};

module.exports = new Mailer();

router.js

var mailer = require('./mailer');

app.get('/mailer', function(req, res) {
    var data = { title: 'Mailer' };
    mailer.getMessages(function(messages) {
        data.messages = messages;
        res.render('index', data);
    });
});

app.get('/message/:seqNo', function(req, res) {
    mailer.getMessage(req.param.seqNo, function(message) {
        res.render('message', {message: message);
    });
});

index.jade

html
    head
        script(type='text/javascript', src='main.js')
    body
        div
            each message in messages
               div(id=message.seqNo)
                   header
                       p= message.from
                       p= message.to
                       p= message.subject
                   div.content
                       p= message.message

message.jade

 !{message.html}

产生类似的东西:

<html>
    <head>
    </head>
    <body>
        --- some content ---
        <img src='cid:someId' />
        --- some content ---
    </body>
</html>

Chrome上的开发者工具,我看到cid:Request

Name cid:someid
Method GET
Status (failed)
Initiator (index):1
Size 0 B
Time 2ms

标题显示

General
  Request URL: cid:someId

Request Headers
  Provisional headers are shown
  Accept:image/webp,image/*,*/*;q=0.8
  Referer:http://localhost:5000/
  User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36

1 个答案:

答案 0 :(得分:1)

看起来你正在直接请求cid:someId没有服务器或浏览器知道如何处理该协议。

如果您只需要渲染,则可以在提供内容之前解析消息并注入内容。例如:

var message = "<img src='panda.jpg' /><img src='cid:someId' />";

function fetchContent(cid) {
  // Lookup goes here
  // return actual content url or base64 content, which will render
  return '/pictures/dog.png';
}
var result = message.replace(/('|")(cid:.*?)('|")/g, fetchContent('$1'));

将返回

<img src='panda.jpg' /><img src=/pictures/dog.png />