Skip to content

Instantly share code, notes, and snippets.

@devongovett
Created October 31, 2011 01:53
Show Gist options
  • Save devongovett/1326727 to your computer and use it in GitHub Desktop.
Save devongovett/1326727 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<title>WebSocket test</title>
</head>
<body>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
var server = 'smtp.example.com',
port = 587,
username = '[email protected]',
password = 'password',
from = '[email protected]',
to = '[email protected]',
message = [
'From: ' + from,
'To: ' + to,
'Subject: Test Email Sent from JS',
'',
'This is a test message sent from JS in a browser using a WebSocket. W00t!'
].join('\n');
var socket = io.connect('http://localhost:8080/');
socket.on('connect', function () {
// Connect to the smtp server
socket.emit('tcp', server, port)
socket.on('connected', function() {
console.log('Connected!');
});
// Send the email
var state = 0;
socket.on('line', function(data) {
console.log(data);
switch (state++) {
case 0:
socket.emit('write', 'HELO example.com');
break;
case 1:
socket.emit('write', 'AUTH LOGIN');
break;
case 2:
socket.emit('write', btoa(username));
break;
case 3:
socket.emit('write', btoa(password));
break;
case 4:
socket.emit('write', 'MAIL FROM: ' + from);
break;
case 5:
socket.emit('write', 'RCPT TO: ' + to);
break;
case 6:
socket.emit('write', 'DATA');
break;
case 7:
socket.emit('write', message + '\r\n.');
break;
case 8:
socket.emit('write', 'QUIT');
break;
case 9:
socket.emit('end');
break;
}
});
socket.on('error', function(err) {
console.log(err);
});
});
</script>
</body>
</html>
var io = require('socket.io').listen(8080),
net = require('net'),
carrier = require('carrier'),
CRLF = '\r\n';
io.sockets.on('connection', function(socket) {
socket.on('tcp', function(host, port) {
var sock = net.createConnection(port, host);
sock.on('connect', function(err) {
if (err)
return socket.emit('error', err);
socket.emit('connected');
carrier.carry(sock, function(line) {
socket.emit('line', line);
});
socket.on('write', function(data) {
if (!sock)
return socket.emit('error', 'No socket');
sock.write(data + CRLF);
});
socket.on('end', function() {
sock.end();
});
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment