title: How to build local node.js mail server
body: <p>I have spent couple of days implementing my own mail server using node.js. I used modules like "smtp-server" for creating smtp server and also "smtp-connection" to connect and send mail to it. But I'm getting confused because I don't know how to send mails from my smtp server to providers smtp servers like google or yahoo.</p>
  
  <p>Can anyone help me?</p>
  
  <p>Here is my code for more information:</p>
  
  <p>My index.js file:</p>
  
  <pre><code>var SMTPServer = require('smtp-server').SMTPServer;
  var port = 9025;
  
  
  var serverOptions = {
      name: "smtp-interceptor",
      onConnect: onConnect,
      onAuth: onAuth,
      onData: onData
  };
  
  var server = new SMTPServer(serverOptions);
  
  server.listen(port, 'localhost', function () {
      console.log('SMTP server is listening on port ' + port);
  });
  
  function onConnect(session, callback) {
      console.log('Connected');
      return callback(); // Accept the connection
  }
  
  function onData(stream, session, callback) {
      stream.pipe(process.stdout); // print message to console
      console.log('Session \n', session.envelope);
      stream.on('end', callback);
  }
  
  function onAuth(auth, session, callback){
     if(auth.username !== 'Mahan' || auth.password !== 'Tafreshi') {
          return callback(new Error('Invalid username or password'));
     }
     callback(null, {user: 123}); // where 123 is the user id or similar property
  }
  </code></pre>
  
  <p>And my connection.js file:</p>
  
  <pre><code>var SMTPConnection = require('smtp-connection');
  
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
  
  var connection = new SMTPConnection({
      host: 'localhost',
      port: 9025,
      secure: false
  });
  
  connection.connect(function (){
      console.log('Connceted to SMTP server');
      var auth = {
          user: 'Mahan',
          pass: 'Tafreshi'
      };
  
      connection.login(auth, function (err) {
          if(err)
              return console.log('Login Failed \n', err);
          console.log('Login Successful');
  
          var envelope = {
              from: "testapp@testapplocal.com",
              to: "mahantp19@gmail.com"
          };
  
          var message = 'Test message1';
  
          connection.send(envelope, message, function (err, info) {
              if(err)
                  return console.log('Error : ' + err);
              console.log('Message sent');
              console.log('Accepted  : ' + info.accepted);
              console.log('Rejected  : ' + info.rejected);
              console.log(info.response);
  
              connection.quit();
              console.log('Quit connection');
              connection.close();
          });
      });
  });
  </code></pre>