我在发送大量域名以检查它们是否存在时遇到问题。我使用节点本机dns并检入MX记录。
我有60k域名的数组我发送这个功能检查重复值并返回唯一域,然后我循环每个值并发送到函数:验证域是否有效,发送DNS请求,检查MX接收的内容和返回正确的值,然后我将其保存到csv文件。不幸的是,只保存1,2到1,5k个域名而不是更多。我没有收到任何错误,只是停止保存。也许有人知道我做错了什么。
ev1.checkdomains(csvdomains, MXtocheck, function(uniquedata) {
var wstream = fs.createWriteStream(path);
for(i = 0; i < uniquedata.length; i++){
var tmpdomian = uniquedata[i].toString();
ev.searchMX(tmpdomian, arrMX, function(valid, domain, comment){
if(valid){
wstream.write(domain + ',' + comment + '\n');
}
});
}
另外我认为重要的是要注意,如果使用我不想要的MX服务器来加工阵列,我会检查返回的MX,这是非常有效的,因为我使用双循环,meaby这就是原因,但我不知道如何做得更好。
dns.resolve(domain, 'MX', function(err, addresses) {
valid = false;
if (err) {
valid = false;
comment = 'MX record not exist';
}
else if (addresses && addresses.length > 0) {
var tmp_comment = '';
for(var i = 0; i < addresses.length; i++){
for(var j = 0; j < arrMX.length; j++){
if(addresses[i].exchange == arrMX[j]){
valid = false;
comment = 'is in wrong MX records ' + addresses[i].exchange;
cb(valid, email, comment);
return;
}
}
tmp_comment += ' ' + addresses[i].exchange;
}
if(!valid){
valid = true;
comment = tmp_comment;
}
}
else {
valid = false;
comment = 'error not specify'
}
cb(valid, email, comment);
});
感谢一百万人提供任何帮助来改进此代码,或者弄清楚出了什么问题。