-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathnewyear.js
109 lines (98 loc) · 3.2 KB
/
newyear.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/** Script to run to send everyone their messages on 1/1. */
var YEAR = 2014;
//var cronJob = require('cron').CronJob;
var mongo = require('mongoskin');
var db = mongo.db('mongodb://localhost:27017/happy');
var users = db.collection('users');
var happinesses = db.collection(YEAR + 'happies');
var nodemailer = require('nodemailer');
var smtpTransport = nodemailer.createTransport("SMTP", {
service: "Gmail",
auth: {
user: '[email protected]',
pass: process.argv[2] || 'password',
}
});
/*
var j = new cronJob(new Date(YEAR + 1, 0, 1), job, function() {
console.log('HAPPY NEW YEAR!!!#@');
}, true);
*/
job();
// Converts an array of JSON objects a CSV/text string.
function jsonToCsvAndText(arr) {
var text = '<ul>';
var csv = '';
var header = '';
for (var i = 0; i < arr.length; i += 1) {
var obj = arr[i];
// For text.
text += '<li>"' + obj.message + '" <em>('
+ (obj.date.getMonth() + 1) + '/' + obj.date.getDate() + ')</em></li>';
// For CSV.
var entry = '';
for (var property in obj) {
if (obj.hasOwnProperty(property) && ['_id', 'username'].indexOf(property) === -1) {
// Create header.
if (i == 0) {
if (header != '') header += ',';
header += property;
}
// Comma-split unless line is empty.
if (entry != '') {
entry += ',';
}
entry += arr[i][property];
}
}
csv += entry + '\r\n';
}
csv = header + '\r\n' + csv;
return {csv: csv, text: text + '</ul>'};
}
function job() {
var lastEmail = process.argv[3];
var query = {'$ne': ''};
if (lastEmail) {
query = {'$gt': lastEmail};
console.log('Starting to send from ' + lastEmail);
}
users.find({'email': query}).toArray(function(err, res) {
for (var i = 0, ii = res.length; i < ii; i += 1) {
user = res[i];
if (!!user.email && user.happiness > 0) {
(function(u) {
happinesses.find({username: u.username}).toArray(function(err, happies) {
console.log('Sending to ' + u.email, u.username, u.happiness, happies.length);
if (happies.length === 0) {
console.log('No happinesses for ' + u.username);
return;
}
if (process.argv[4] !== 'REAL') {
console.log('DRYRUN');
return;
}
happies = jsonToCsvAndText(happies);
var html = 'Hey <strong>' + u.username + '</strong>,<br><br>'
+ 'Enjoy 2014\'s happiest moments...and don\'t forget to make '
+ 'new ones in the new year!<br>' + happies.text
+ '<br>Love,<br><strong><a href="http://happinessjar.com">'
+ 'Your Happiness Jar</strong></a>';
var msg = {
html: html,
from: 'The Happiness Moose <[email protected]>',
to: u.email,
subject: '[Your Happiness Jar] 2014\'s happiest moments.'
};
smtpTransport.sendMail(msg, function(err, res) {
if (err) {
console.log('Error sending to ' + u.email);
}
console.log(err || res);
});
});
})(user);
}
}
});
}