2016-03-31 6 views
0

В настоящее время я разрабатываю почтовый клиент для нашего приложения NodeJs.Как доставить вложения электронной почты к сообщению на NodeJs с помощью Express, Jade, Imap

У меня все работает, (Список сообщений, открытое сообщение и т. Д.), Кроме вложений.

Как я должен доставить вложения на страницу так «ИДС someId» источник сделает это исправить место.

Я пытался использовать Google как работать с источниками cid, не понимая, как их использовать.

Я могу видеть вложения сообщений на NodeJs так:

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} 

Производит что-то вроде:

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

инструмент для разработчиков на Chrome, я вижу чид: Запрос

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

Вы используете nodemailer? – colonelsanders

+0

Нет, это для отправки писем? – EspeH

+0

[Да, вот ссылка] (https://github.com/nodemailer/nodemailer). Кажется, что ваша реализация пытается загрузить из 'cid', но я понимаю, что почтовая служба обрабатывает отображение cid <--> пути/содержимого при встраивании вложений. Если вы настаиваете на его создании самостоятельно, может быть полезно взглянуть на то, как это делает nodemailer. – colonelsanders

ответ

1

Похоже, вы делаете прямой запрос ИДС 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 /> 

 Смежные вопросы

  • Нет связанных вопросов^_^