function Mailer() { this.http = null; } Mailer.prototype.home = function (client,data) { client.writeln("HTTP/1.1 200 OK"); client.writeln("client: close"); client.writeln("Date: ", client.startTime.toUTCString()); client.writeln("Expires: ", client.startTime.toUTCString()); client.writeln("Server: Mailer/0.1"); client.writeln("Content-type: text/html\n"); client.writeln("Bulk mailer"); client.writeln(""); if (typeof(data) != 'undefined' && data != null) { client.writeln("

Please check your login settings and verify that the message and address list files exist."); } else { if (!data) data = new Record; try { var file = new Stream('mail.txt','rt'); data = new Record; file.readMIME(data); file.close(); } catch(err) {writeln(err) } } client.writeln("

"); client.writeln(' '); client.writeln(' '); client.writeln(' '); client.writeln(' '); client.writeln('
To '); client.writeln('
Address list'); client.writeln(' '); client.writeln('
Subject'); client.writeln('
Text message'); client.writeln('
Or load the message from a file'); client.writeln('
Return address'); client.writeln('
Mail system'); client.writeln('
Login'); client.writeln('
Password'); client.writeln('
Server'); client.writeln('
'); client.writeln('
'); client.writeln("
"); } Mailer.prototype.logout =function(client) { client.writeln("HTTP/1.1 200 OK"); client.writeln("client: close"); client.writeln("Date: ", client.startTime.toUTCString()); client.writeln("Expires: ", client.startTime.toUTCString()); client.writeln("Server: Mailer/0.1"); client.writeln("Content-type: text/html\n"); client.writeln("Sending"); client.writeln(""); client.writeln("

You may close this window
"); client.writeln(''); } Mailer.prototype.preview = function(client,data) { var addressfile = null; var notefile = null; try { var mail = new Mail(data.get('method'),data.get('name'),data.get('password'),data.get('server'),'','',data.get('return')); if (data.get('addressfile')) addressfile = new Stream(data.get('addressfile'),'rt'); if (data.get('notefile')) notefile = new Stream(data.get('notefile'),'rb'); } catch (err) { return this.home(client,data); } client.writeln("HTTP/1.1 200 OK"); client.writeln("client: close"); client.writeln("Date: ", client.startTime.toUTCString()); client.writeln("Expires: ", client.startTime.toUTCString()); client.writeln("Server: Mailer/0.1"); client.writeln("Content-type: text/html\n"); client.writeln("Sending"); client.writeln("

"); var subject = data.get('subject'); client.writeln(' '); client.writeln('
To:',data.get("address")); if (addressfile) { var firstline = addressfile.readLine(); var fields = firstline.split('\t'); if (fields.length == 1) fields = firstline.split(','); if (fields.length == 1) // just a list of addresses { client.writeln(firstline,",",addressfile.readLine(),"..."); } else { if (!data.get('addressfield')) data.set('addressfield','EMAIL'); client.writeln('"); } } if (addressfile) addressfile.close(); client.writeln('
Subject:',subject ); var note = data.get('note'); if (addressfile) { var r = new Record; var t = new Table(data.get('addressfile')); t.getRow(1,r); n = new Stream; n.format(note,r); if (notefile) { n.writeln("\r\n"); n.format(notefile,r); } note = n; } else if (notefile) { note += '\r\n' + notefile.readText(); } client.writeln('
Note:
',note.toString() ,'
'); client.writeln('
Return address',data.get("return")); client.writeln('
'); data.unSet("addressfield"); for (var i=0; i'); client.writeln(''); client.writeln(''); client.writeln('
') client.writeln("
"); if (notefile) notefile.close(); if (addressfile) addressfile.close(); } Mailer.prototype.send =function (client,data) { client.writeln("HTTP/1.1 200 OK"); client.writeln("client: close"); client.writeln("Date: ", client.startTime.toUTCString()); client.writeln("Expires: ", client.startTime.toUTCString()); client.writeln("Server: Mailer/0.1"); client.writeln("Content-type: text/html"); client.writeln(''); client.writeln("Sending"); client.writeln(""); client.writeln("

Starting the mail service

") client.writeln("
",data,"

") client.writeln("Logging into ",data.get('server'),' as ',data.get('name'),"
"); // writeln(data.toString()); if (data.get('METHOD') == '') data.set('METHOD','SMTP'); var addressfile = null; var notefile = null; try { var mail = new Mail(data.get('method'),data.get('name'),data.get('password'),data.get('server'),'','',data.get('return')); if (data.get('addressfile')) addressfile = new Stream(data.get('addressfile'),'rt'); if (data.get('notefile')) notefile = new Stream(data.get('notefile'),'rb'); } catch (err) { return this.home(client,data); } var note = data.get('note'); if (notefile) note += '\r\n' + notefile.readText(); var subject = data.get('subject'); var address = data.get('address'); try { var file = new Stream('mail.txt','wt'); data.unSet('note'); file.writeMIME(data); file.close(); delete file; } catch(err) { writeln(err) } var trouble = new Array; var success = new Array; client.writeln("

Sending

"); if (address) { client.writeln('
',address,' '); try { if (mail.send(address,subject,note)) { client.writeln("OK"); success.push(address); } else { trouble.push({name:address, why: ''}); } } catch(err) { client.writeln('',err,''); trouble.push(address); } } if (data.get('addressfield')) /* mailmerge */ { var t = new Table(data.get('addressfile')); for (var i=1; i <= t.count; i++) { var address = t.get(i,data.get('addressfield')); client.writeln('
',address,' '); var n = new Stream; n.format(note,t.getRow(i)); client.writeln('
',n.toString(),'
'); try { if (mail.send(address,subject,n.toString())) { client.writeln("OK"); success.push(address); } else { trouble.push({name:address,value:mail.error}); } } catch(err) { client.writeln('',err,''); trouble.push({name:address,value:err}); } } } else if (addressfile) while (!addressfile.eof) { var address = addressfile.readLine(); client.writeln('
',address,' '); try { if (mail.send(address,subject,note)) { client.writeln("OK"); success.push(address); } else { trouble.push({name: address, value:mail.error}); } } catch(err) { client.writeln('',err,''); trouble.push({name: address, value:err}); } } client.writeln("

Done sending

") if (success.length) { client.writeln("

Your message was sent to these addresses"); for(var i in success) client.writeln("
",success[i]); } if (trouble.length) { client.writeln("

I was unable to send mail to these addresses"); for(var i in trouble) client.writeln("
",trouble[i].name,": ",trouble[i].value," "); } client.writeln("

"); client.writeln("
"); } Mailer.prototype.run = function() { if (this.http != null) return; this.http = null; for (var port = 8080; this.http == null && port < 8180; port++) { try { this.http = new Server(port); } catch(err) { writeln('Port ', port,' appears to be in use'); } } var ie = system.getKey('hkey_classes_root/htmlfile/shell/open/command',""); var browser = null try { var cmd = ie + ' ' + '"http://127.0.0.1:'+ this.http.port + '/"' writeln(cmd) cmd = cmd.split('-'); browser = new Process(cmd[0], '-' + cmd[1]); //'-nohome ' + '"http://'+ this.http + '/"'); //browser = new Process("c:\\program files\\internet explorer\\iexplore.exe", '-nohome ' + '"http://'+ this.http + '/"'); } catch(x) {writeln("Couldn't open the browser: ",x);} //var browser = new Process('http://127.0.0.1:' + this.http.port + '/'); //openBrowser("http://127.0.0.1:" + this.http.port + "/"); while (!jsShouldStop() && browser.active) /* invokes garbage collection, and may stall */ { if (!this.http.anyoneWaiting) { sleep(100); continue; } var client = this.http.accept(); if (client == null) continue; var request = client.readLine().split(/\s+/); client.method = request[0]; client.uri = request[1]; if (client.uri == null || client.uri == '') client.uri = '/'; client.version = request[2]; //this.page() should give enough time for the header packet to arrive if (client.canRead) { client.startTime = new Date(); client.header = new Record; client.readMIME(client.header); } client.appname = client.uri.substr(1); client.query = '' request = client.uri.match(/\/?([^?]*)\?(.*)/); if (request != null) { client.appname = request[1]; client.query = request[2]; } if (client.method == "GET" && client.query) client.data = new Record(client.query,'&'); else if (client.method = "POST" && client.header.get('Content-type') == 'application/x-www-form-urlencoded') client.data = new Record(client.read(client.header.get('Content-length')),'&'); if (client.data) {for(x=0; xHTTP/1.1 404 Not Found"); client.writeln("
URL:",client.uri); client.writeln("
Home"); client.close(); } browser.close(); this.http.close(); } var server = new Mailer(); server.run(); delete server;