-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtext.js
86 lines (72 loc) · 2.3 KB
/
text.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
'use strict';
var providers = require('./providers.json'),
spawn = require('child_process').spawn;
var debugEnabled = false;
var default_options = {
fromAddr: '[email protected]',
fromName: 'Textbelt',
subject: '',
region: 'us'
}
/**
* General purpose logging function, gated by a configurable value
*/
var output = function () {
if (debugEnabled) {
return console.log.apply(this, arguments);
}
}
/**
* Enable or disable debug output
*
* @param [bool] enable - Whether to enable (true) or disable (false) debugging
*
* @returns [bool] Whether debugging is enabled or not
*/
module.exports.debug = function (enable) {
debugEnabled = enable;
return debugEnabled;
}
/**
* Sends a text message by sending emails to all providers
*
* @param [string] phone - The number to send a message to
* @param [string] message - The message to send
* @param [object] opts - See readme
* @param [func] cb - See readme
*/
module.exports.sendText = function (phone, message, opts, cb) {
output('txting phone', phone, '\n + message:', message);
// Setup options
opts = opts || {};
var fromAddr = opts.fromAddr ? opts.fromAddr : default_options.fromAddr;
var fromName = opts.fromName ? opts.fromName : default_options.fromName;
var region = opts.region ? opts.region : default_options.region;
var subject = opts.subject ? opts.subject : default_options.subject;
var providers_list = providers[region];
var done = 0,
all = providers_list.length;
// Send email to all providers
providers_list.forEach(function (provider) {
// Create/get email and headers
var email = provider.replace('%s', phone);
var headers = 'Subject: ' + subject + '\r\n';
headers += 'From: ' + fromName + ' <' + fromAddr + '>\r\n\r\n';
var child = spawn('sendmail', ['-f', fromAddr, email]);
// Pipe processes to output
child.stdout.on('data', output);
child.stderr.on('data', output);
child.on('error', function (err) {
output('sendmail failed', { email: email, err: err });
done++;
if (done == all && cb) cb(false);
});
child.on('exit', function () {
done++;
if (done == all && cb) cb(false);
});
// Write message then end input
child.stdin.write(headers + message + '\n.');
child.stdin.end();
});
}