2013-12-06 3 views
3

Сценарий прост:NodeJS Email псевдонимаа

  • У меня есть несколько доменов
  • Я хочу, чтобы запустить электронную почту на этих доменах
  • Я wantthem все для доставки по тому же адресу, независимо от того, кто они, где отправляется или на какой домен
  • Я хочу, чтобы сохранить оригинальные заголовки конкретно к полю

Для этого проекта мне нужно использовать NodeJS

Я пробовал несколько вещей безрезультатно, я довольно разбираюсь в узле, но понятия не имею, что я делаю, когда дело касается электронной почты.

У меня есть все домены, указывающие на правильное место, включая записи MX, и используя simplesmtp, я могу получать электронные письма, я просто не могу понять, как их доставить, не разбивая заголовки и не пересылая их в этом случае они отображаются в их адресате в виде двух электронных писем.

Любые предложения или руководство высоко ценится

С уважением, Дэвид

Поскольку все мы любим код вот соответствующий StuFF

var simplesmtp = require("simplesmtp"), 
     MailParser = require("mailparser").MailParser, 
     mailparser = new MailParser(), 
     nodemailer = require("nodemailer"), 
     gmail  = nodemailer.createTransport("SMTP",{ 
      service: "Gmail", 
      auth: { 
       user: "***", 
       pass: "***" 
      } 
     }), 
     fs   = require("fs"), 
     smtp  = simplesmtp.createServer(); 

    // Setup the listener 
    smtp.listen(25); 

    // runs when the email is initially recieved 
    smtp.on("startData", function(connection){ 
     // log out some basic stuff 
     console.log("Message from:", connection.from); 
     console.log("Message to:", connection.to); 
     // start the write stream 
     connection.saveStream = fs.createWriteStream("/path/message.txt"); 
    }); 

    // each chunk of data that is received 
    smtp.on("data", function(connection, chunk){ 
     // continue the write stream 
     connection.saveStream.write(chunk); 
    }); 

    // email completly received 
    smtp.on("dataReady", function(connection, callback){ 
     // end the write stream 
     connection.saveStream.end(); 
     // log some more stuff 
     console.log("Incoming message saved to /path/message.txt"); 

     // start a readstream to forward out the message 
     fs.createReadStream("/path/message.txt").pipe(mailparser); 

     // 
     callback(null, "ABC1"); // ABC1 is the queue id to be advertised to the client 
     // callback(new Error("Rejected as spam!")); // reported back to the client 
    }); 

    // Parse the email 
    mailparser.on("end", function(email){ 
     // now lets forward the mail 
     // for now everything goes back to *****, 
     // eventually ill be setting up some configs to handle other addresses 
    // console.log(email.headers); */ 
    // email.headers['X-Forwarded-To'] = "*****"; 
    // email.to = "*****"; 
     delete email.headers.received; 
     delete email.text; 
    // delete email.headers.X-Received; 
     email.to = email.to + ', ' + "*****"; 
     email.headers.to = email.to + ', ' + "*****"; 
     console.log(email.headers); 

     gmail.sendMail(email, function(err, response){ 
      if(err) 
       console.log(err); 

      // now clean up that message file 
      fs.rename('/path/message.txt', 'emails/'+new Date().toJSON()+email.subject+'.eml', function(err){ 
       if(err) console.log(err); 
       fs.unlink('/path/message.txt', function(){console.log('clenaed up');}); 

      }) 

      // final logging 
      console.log('sent'); 
     }); 
    }); 
+0

вы были в состоянии сделать это? Я не понимаю понятия электронной почты. Таким образом, ваш SMTP-сервер действует как mta-сервер, что означает, что он может получать электронные письма. Затем вы пытаетесь переслать его в свою учетную запись gmail, но хотите, чтобы сообщение запоминало их оригинал по адресам, а затем, когда вы отвечаете, они должны быть отправлены обратно от имени этих оригиналов по адресам через gmail .... –

ответ

2

Вы можете установить envelope sender для электронной почты using nodemailer так что он содержит адрес пересылки:

 
     email.envelope = { 
      from: email.from 
      to: "[email protected]" 
     } 

Некоторые службы SMTP не позволят вам установить отправителя конверта (MAIL FROM). У вас могут быть проблемы с Gmail.

Смотрите также: