Skip to content

Commit a65bf49

Browse files
committed
Merge pull request NARKOZ#90 from kashyapakshay/master
NodeJS for kumar_asshole
2 parents ded4526 + 7bf95ed commit a65bf49

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

nodejs/kumar_asshole.js

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#!/usr/bin/env node
2+
3+
/* Before running:
4+
npm install nodemailer
5+
npm install imap
6+
7+
I realize this is long. IMAP can only fetch emails and nodemailer can only
8+
send. Could try implementing with Gmail Node API later.
9+
*/
10+
11+
var GMAIL_USERNAME = process.env['GMAIL_USERNAME'];
12+
var GMAIL_PASSWORD = process.env['GMAIL_PASSWORD'];
13+
14+
var KUMAR_EMAIL = '[email protected]';
15+
var EMAIL = 'No worries mate, be careful next time';
16+
17+
// Scan for unread email from Kumar
18+
var Imap = require('imap');
19+
var imap = new Imap({
20+
user: GMAIL_USERNAME,
21+
password: GMAIL_PASSWORD,
22+
host: 'imap.gmail.com',
23+
port: 993,
24+
tls: true,
25+
tlsOptions: { rejectUnauthorized: false }
26+
});
27+
28+
function openInbox(cb) {
29+
imap.openBox('INBOX', false, cb);
30+
}
31+
32+
imap.once('ready', function() {
33+
openInbox(function(err, box) {
34+
if (err)
35+
process.exit(1);
36+
37+
imap.search(['UNSEEN', ['FROM', KUMAR_EMAIL]],
38+
function(err, results) {
39+
40+
if (err)
41+
process.exit(1);
42+
43+
// RegEx search for keywords; ignore case
44+
var kumarPattern = new RegExp(/sorry|help|wrong/i);
45+
46+
// IMAP dumps all headers, so need to parse and get email body
47+
var MailParser = require("mailparser").MailParser;
48+
49+
var f = imap.fetch(results, {bodies: ''});
50+
f.on('message', function(msg, seqno) {
51+
msg.on('body', function(stream, info) {
52+
var kumarEmail = "";
53+
54+
stream.on('data', function(chunk) {
55+
kumarEmail += chunk.toString('utf8');
56+
});
57+
58+
stream.once('end', function() {
59+
var mailparser = new MailParser();
60+
mailparser.on("end", function(mail_object){
61+
62+
// If the RegEx matches
63+
if(mail_object.text.match(kumarPattern)) {
64+
// Shoot email to Kumar!
65+
var nodemailer = require('nodemailer');
66+
67+
// create reusable transporter object using SMTP transport
68+
var transporter = nodemailer.createTransport({
69+
service: 'Gmail',
70+
auth: {
71+
user: GMAIL_USERNAME,
72+
pass: GMAIL_PASSWORD
73+
}
74+
});
75+
76+
// setup e-mail data
77+
var mailOptions = {
78+
from: GMAIL_USERNAME,
79+
to: KUMAR_EMAIL,
80+
subject: 'Database Fixes',
81+
text: EMAIL
82+
};
83+
84+
// send mail with defined transport object
85+
transporter.sendMail(mailOptions, function(error, info) {
86+
if(error)
87+
process.exit(1)
88+
});
89+
}
90+
});
91+
92+
mailparser.write(kumarEmail);
93+
mailparser.end();
94+
});
95+
});
96+
97+
msg.once('end', function() {
98+
// Fetched all unread from kumar
99+
});
100+
});
101+
102+
f.once('error', function(err) {
103+
process.exit(1);
104+
});
105+
106+
f.once('end', function() {
107+
imap.end();
108+
});
109+
});
110+
});
111+
});
112+
113+
imap.connect();

0 commit comments

Comments
 (0)