Slide 29
Slide 29 text
ns.checkSingleEmail = function(user, email, tag, ip) {
return new Promise(function(fulfill, reject) {
// First, see if user can check an email
return ns.canUserCheckEmail(user, ip)
.then(function() { // Local db lookup for cached result
return ns.localEmailLookup(user, email, tag, ip);
}, function(err) { // Error (no credits or restricted by IP)
reject(err);
})
.then(function(json) {
if (json) { // Return cached JSON response immediately
return fulfill(json);
}
// Perform all lookups
return ns.mxLookup(domain)
.then(function(mxRecords) {
if (!mxRecords) {
throw new Error('no MX records exist for domain');
}
return ns.smtpCheck(user, email, mxRecords);
})
.then(function(json) {
fulfill(json);
});
})
.catch(function(err) {
if(err.code == 'ECONNREFUSED') {
err.json = ns.errorJson(email, 'connection to mail server refused');
} else {
err.json = ns.errorJson(email, err.message || 'connection timeout');
}
db.query("DELETE FROM email_mx WHERE domain = ?", [domain]);
reject(err);
});
});
};