2012-04-17 4 views
2

私はnode.jsにダム(braindead)smtpサーバを書いて、他のアプリケーションをテストするためのスタブサーバとして働こうとしています。node.jsの基本smtpサーバ

私は基本的な回答があり、それはtelnetでうまくいきます。

しかし、私のPHP/Codeigniterアプリケーションで使用すると、ゆっくりと動作して役に立たなくなることがあり、時々fwirite() broken socketというエラーが発生します。

  • PHPアプリは、Telnet

を使用した場合のNode.jsアプリが正常に動作本物のSMTPサーバ

  • を使用して正常に動作私は、重大または明白なステップ足りませんか?私が誤って扱っているソケットやシステムポインタのリソースについて何かありますか?

    それは汚いかなり速い&だが、それがポイントだった:

    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以外のどんなメールクライアントでも動作しますか?