2016-03-31 7 views
0

Ich bin derzeit die Entwicklung E-Mail-Client zu unserer NodeJS Anwendung liefern.Wie E-Mail-Anhänge Nachricht auf NodeJS mit Express, Jade, Imap

Ich habe alles funktioniert, (List-Nachrichten, offene Nachricht etc ..), mit Ausnahme Anhänge.

Wie sollte ich Anhänge liefern Seite so ‚cid: someId‘ Quelle wird es machen zu reparieren.

Ich habe versucht, googeln, wie mit cid Quellen zu arbeiten, ohne zu verstehen, wie sie zu benutzen.

kann ich Nachrichtenanlagen auf NodeJS wie diese:

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.j ade

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} 

Produziert etwas wie:

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

Developer-Tool auf Chrome, ich sehe cid: Anfrage

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

und Header zeigen

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 
+0

Verwenden Sie nodemailer? – colonelsanders

+0

Nein, ist es für das Senden von E-Mails? – EspeH

+0

[Ja, hier ist ein Link] (https://github.com/nodemailer/nodemailer). Ihre Implementierung scheint zu versuchen, von der 'cid' zu laden, aber es ist mein Verständnis, dass der E-Mail-Dienst die' cid <-->-Zuordnung beim Einfügen von Anhängen behandelt. Wenn Sie darauf bestehen, es selbst zu bauen, könnte es hilfreich sein, einen Blick darauf zu werfen, wie es nodemailer macht. – colonelsanders

Antwort

1

Sieht aus wie Sie eine direkte Anfrage an cid machen: someId ohne den Server oder Browser zu wissen, was mit diesem Protokoll zu tun.

Wenn alles, was Sie brauchen, ist Rendern Sie die Nachricht mit dem Inhalt nicht analysieren und injizieren, bevor Sie es bedienen. Zum Beispiel:

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

welche kehrt

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