zb-email-verifier
Advanced tools
Comparing version 0.6.4 to 0.6.5
@@ -38,9 +38,2 @@ "use strict"; | ||
}; | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
return result; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
@@ -50,3 +43,3 @@ return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var dns = __importStar(require("dns")); | ||
var dns_1 = __importDefault(require("dns")); | ||
var debug_1 = __importDefault(require("debug")); | ||
@@ -56,7 +49,7 @@ var lodash_1 = __importDefault(require("lodash")); | ||
var bluebird_1 = __importDefault(require("bluebird")); | ||
var netsend_1 = __importDefault(require("./netsend")); | ||
var smtp_1 = require("./smtp"); | ||
var debug = debug_1.default.debug("email-verifier"); | ||
function verify(opts) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var emailRegex, currentJob, netConn, timedout, mainJob; | ||
var emailRegex, currentJob, client, timedout, mainJob; | ||
var _this = this; | ||
@@ -70,24 +63,22 @@ return __generator(this, function (_a) { | ||
mainJob = bluebird_1.default.resolve((function () { return __awaiter(_this, void 0, void 0, function () { | ||
var _a, emailHost, mx; | ||
var _a, emailHost, host; | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
currentJob = "MXRECORD"; | ||
_a = opts.to.split('@'), emailHost = _a[1]; | ||
if (timedout) | ||
return [2 /*return*/]; | ||
currentJob = "MXRECORD"; | ||
return [4 /*yield*/, resolveMx(emailHost)]; | ||
case 1: | ||
mx = _b.sent(); | ||
host = _b.sent(); | ||
if (timedout) | ||
return [2 /*return*/]; | ||
currentJob = "CONN"; | ||
client = new smtp_1.SmtpClient({ host: host }); | ||
if (timedout) | ||
return [2 /*return*/]; | ||
return [4 /*yield*/, netsend_1.default({ port: 25, host: mx })]; | ||
case 2: | ||
netConn = _b.sent(); | ||
currentJob = "VERIFY"; | ||
if (timedout) | ||
return [2 /*return*/]; | ||
return [4 /*yield*/, verifySMTP(netConn, opts, emailHost)]; | ||
case 3: return [2 /*return*/, _b.sent()]; | ||
return [4 /*yield*/, verifySMTP(client, opts, emailHost)]; | ||
case 2: return [2 /*return*/, _b.sent()]; | ||
} | ||
@@ -103,4 +94,4 @@ }); | ||
return; | ||
if (netConn) | ||
netConn.end(); | ||
if (client) | ||
client.close(); | ||
if (currentJob) | ||
@@ -126,4 +117,4 @@ return resolve(currentJob + "_TIMEOUT"); | ||
case 3: | ||
if (netConn) | ||
netConn.end(); | ||
if (client) | ||
client.close(); | ||
return [7 /*endfinally*/]; | ||
@@ -149,3 +140,3 @@ case 4: return [2 /*return*/]; | ||
_a.trys.push([1, 3, , 4]); | ||
dnsResolveMx = bluebird_1.default.promisify(dns.resolveMx, { context: dns }); | ||
dnsResolveMx = bluebird_1.default.promisify(dns_1.default.resolveMx, { context: dns_1.default }); | ||
return [4 /*yield*/, dnsResolveMx(emailHost)]; | ||
@@ -173,66 +164,49 @@ case 2: | ||
return __awaiter(this, void 0, void 0, function () { | ||
var resmsg, writeMsg, writeMsg_1, e_3; | ||
var ensure, response, randomEmail, response_1, e_3; | ||
var _this = this; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
_a.trys.push([0, 10, 11, 12]); | ||
debug('CONNECTED SMTP SERVER'); | ||
return [4 /*yield*/, netConn.response()]; | ||
debug('VERIFY USING SMTP'); | ||
_a.label = 1; | ||
case 1: | ||
resmsg = _a.sent(); | ||
debug(resmsg[0]); | ||
if (resmsg[0].substr(0, 3) !== '220') { | ||
throw new Error("VERIFY_FAIL"); | ||
} | ||
writeMsg = "HELO " + opts.helo; | ||
debug(writeMsg); | ||
netConn.write(writeMsg); | ||
return [4 /*yield*/, netConn.response()]; | ||
_a.trys.push([1, 8, 9, 10]); | ||
ensure = function (promise, value) { return __awaiter(_this, void 0, void 0, function () { | ||
var response; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, promise]; | ||
case 1: | ||
response = _a.sent(); | ||
if (response.code !== value) | ||
throw new Error("VERIFY_FAIL"); | ||
return [2 /*return*/, response]; | ||
} | ||
}); | ||
}); }; | ||
return [4 /*yield*/, ensure(netConn.connect(), 220)]; | ||
case 2: | ||
resmsg = _a.sent(); | ||
debug(resmsg[0]); | ||
if (resmsg[0].substr(0, 3) !== '250') { | ||
throw new Error("VERIFY_FAIL"); | ||
} | ||
// MAIL FROM | ||
writeMsg = "MAIL FROM: <" + opts.from + ">"; | ||
debug(writeMsg); | ||
netConn.write(writeMsg); | ||
return [4 /*yield*/, netConn.response()]; | ||
_a.sent(); | ||
return [4 /*yield*/, ensure(netConn.helo(opts.helo), 250)]; | ||
case 3: | ||
resmsg = _a.sent(); | ||
debug(resmsg[0]); | ||
if (resmsg[0].substr(0, 3) !== '250') { | ||
throw new Error("VERIFY_FAIL"); | ||
} | ||
// RCPT TO | ||
writeMsg = "RCPT TO: <" + opts.to + ">"; | ||
debug(writeMsg); | ||
netConn.write(writeMsg); | ||
return [4 /*yield*/, netConn.response()]; | ||
_a.sent(); | ||
return [4 /*yield*/, ensure(netConn.from(opts.from), 250)]; | ||
case 4: | ||
resmsg = _a.sent(); | ||
debug(resmsg[0]); | ||
if (!(resmsg[0].substr(0, 3) === '250')) return [3 /*break*/, 8]; | ||
if (!(opts.catchalltest === true)) return [3 /*break*/, 6]; | ||
// RCPT TO | ||
_a.sent(); | ||
return [4 /*yield*/, netConn.to(opts.to)]; | ||
case 5: | ||
response = _a.sent(); | ||
if (response.code !== 250) | ||
return [2 /*return*/, "NOT_EXIST"]; | ||
if (!(opts.catchalltest === true)) return [3 /*break*/, 7]; | ||
debug('MAILBOX EXIST..CHECKING FOR CATCHALL'); | ||
writeMsg_1 = "RCPT TO: <" + generateRandomEmail(emailHost) + ">"; | ||
debug(writeMsg_1); | ||
netConn.write(writeMsg_1); | ||
return [4 /*yield*/, netConn.response()]; | ||
case 5: | ||
resmsg = _a.sent(); | ||
if (resmsg[0].substr(0, 3) === '250') { | ||
return [2 /*return*/, 'CATCH_ALL']; | ||
} | ||
else { | ||
return [2 /*return*/, 'EXIST']; | ||
} | ||
return [3 /*break*/, 7]; | ||
case 6: return [2 /*return*/, 'EXIST']; | ||
case 7: return [3 /*break*/, 9]; | ||
case 8: return [2 /*return*/, 'NOT_EXIST']; | ||
case 9: return [3 /*break*/, 12]; | ||
case 10: | ||
randomEmail = randomstring_1.default.generate(32) + "@" + emailHost; | ||
return [4 /*yield*/, netConn.to(randomEmail)]; | ||
case 6: | ||
response_1 = _a.sent(); | ||
if (response_1.code === 250) | ||
return [2 /*return*/, "CATCH_ALL"]; | ||
_a.label = 7; | ||
case 7: return [2 /*return*/, "EXIST"]; | ||
case 8: | ||
e_3 = _a.sent(); | ||
@@ -242,6 +216,6 @@ if (debug_1.default.enabled(debug.namespace)) | ||
throw new Error("VERIFY_FAIL"); | ||
case 11: | ||
netConn.end(); | ||
case 9: | ||
netConn.close(); | ||
return [7 /*endfinally*/]; | ||
case 12: return [2 /*return*/]; | ||
case 10: return [2 /*return*/]; | ||
} | ||
@@ -251,5 +225,2 @@ }); | ||
} | ||
function generateRandomEmail(emailHost) { | ||
return randomstring_1.default.generate(32) + "@" + emailHost; | ||
} | ||
function delay(ms) { | ||
@@ -256,0 +227,0 @@ return new Promise(function (resolve) { return setTimeout(resolve, ms); }); |
{ | ||
"name": "zb-email-verifier", | ||
"description": "Promise-based library for verify an email address existence via SMTP", | ||
"version": "0.6.4", | ||
"version": "0.6.5", | ||
"author": { | ||
@@ -27,5 +27,7 @@ "name": "ZIGBANG", | ||
"bluebird": "^3.5.5", | ||
"chalk": "^3.0.0", | ||
"debug": "^4.1.1", | ||
"lodash": "^4.17.15", | ||
"randomstring": "^1.1.5" | ||
"randomstring": "^1.1.5", | ||
"wait-queue": "^1.1.2" | ||
}, | ||
@@ -32,0 +34,0 @@ "devDependencies": { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
21333
6
394
+ Addedchalk@^3.0.0
+ Addedwait-queue@^1.1.2
+ Addedansi-styles@4.3.0(transitive)
+ Addedchalk@3.0.0(transitive)
+ Addedcolor-convert@2.0.1(transitive)
+ Addedcolor-name@1.1.4(transitive)
+ Addedhas-flag@4.0.0(transitive)
+ Addedsupports-color@7.2.0(transitive)
+ Addedwait-queue@1.1.4(transitive)