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);