2012-04-17 109 views
2

我想在node.js中编写一个愚蠢的(braindead)smtp服务器,作为测试其他应用程序的存根服务器。node.js中的基本smtp服务器

我有一套基本的回应,它与telnet很好。

但是,当我的php/Codeigniter应用程序使用它时,它运行得太慢以至于无用,并且偶尔会出现fwirite() broken socket错误。

  • 的PHP应用程序运行正常使用telnet

我缺少一个关键的或明显的阶梯时使用真实的SMTP服务器

  • Node.js的应用程序运行正常?有没有关于我误操作的套接字或系统指针资源?

    这是相当快&肮脏但是这一点:

    var net = require('net'); 
    
    net.createServer(function (socket) { 
    
        var mode = 'nodata'; 
    
        socket.on('data', function(data) { 
    
        var data_string = data.toString(); 
        console.log(data_string); 
    
        if (mode == 'nodata') { 
    
         if (data_string.substring(0, 4) == 'EHLO') { 
         socket.write('hello ' + data_string.substring(5, data_string.length - 1) + '\r\n'); 
         } else if (data_string.substring(0, 10) == 'AUTH LOGIN') { 
         socket.write('250 ok\r\n'); 
         } else if (data_string.substring(0, 10) == 'MAIL FROM:') { 
         socket.write('250 ok\r\n'); 
         } else if (data_string.substring(0, 8) == 'RCPT TO:') { 
         to = data_string.substring(8, data_string.length - 1); 
         socket.write('250 ok its for ' + to + '\r\n'); 
         } else if (data_string.substring(0, 4) == 'DATA') { 
         socket.write('354 ok send it\r\n'); 
         mode = 'data'; 
         } else if (data_string.substring(0, 4) == 'QUIT') { 
         socket.write('221 Goodbye\r\n'); 
         socket.end(); 
         return; 
         } 
    
        } else if (mode == 'data') { 
    
         if (data_string.substring(0, 1) == '.') { 
         socket.write('250 message queued\r\n'); 
         mode = 'nodata'; 
         } 
    
        } 
    
        }); 
    
    }).listen(3434); 
    
  • 回答

    0

    你缺少多少断行逻辑我希望的:不知道这会导致你观察到的行为问题,但你可能想要使用一些功能更强大的功能(like this one, perhaps),以防您的实施没有真正处理正确的情况。除了telnet之外,它还可以与任何其他邮件客户端一起使用吗