MailEnable - Randomizando IP de Saída do SMTP
Olá meus Unicórnios! 🦄✨
O MailEnable é um serviço excelente de envio de e-mails para windows, tem uma versão free que atende boa parte das necessidades.
Porem, não permite randomizar o IP do SMTP, o que acaba nos forçando a configurar um único IP e um único HostName para a saída de SMTP.
Porem, para tudo existe uma solução!
O MailEnable salva estas configurações no Registro do Windows em:
HKLM\SOFTWARE\Wow6432Node\Mail Enable\Mail Enable\Connectors\SMTP\
Através das chaves:
- Outbound Interface: Controlando o IP de Saída
- Host Name: Controlando o Host Name de Saída
Então, iremos criar um Script em NodeJs, que:
- Randomiza um Array (Onde cada elemento tem um conjunto de IP+ Host Name)
- Atualiza as entradas no Registro do Windows
- Reinicia o serviço "MESMTPCS" (que é o Serviço de SMTP)
Iremos precisar de apenas uma dependência, para alterar chaves no registro do windows:
E no final, teremos um código similar ao código abaixo:
const regedit = require("regedit");
const { exec } = require("child_process");
const util = require("util");
const execAsync = util.promisify(exec);
const regPath = "HKLM\\SOFTWARE\\Wow6432Node\\Mail Enable\\Mail Enable\\Connectors\\SMTP\\";
const servers = [
{ ip: "1.0.0.1", hostname: "mail1.teste.com.br" },
{ ip: "1.0.0.2", hostname: "mail2.teste.com.br" },
{ ip: "1.0.0.3", hostname: "mail3.teste.com.br" },
{ ip: "1.0.0.4", hostname: "mail4.teste.com.br" }
];
const randomServer = servers[Math.floor(Math.random() * servers.length)];
const randomIP = randomServer.ip;
const randomHostname = randomServer.hostname;
async function modifyRegistry() {
const valuesToPut = {
[`${regPath}`]: {
"Outbound Interface": {
value: randomIP,
type: "REG_SZ"
},
"Host Name": {
value: randomHostname,
type: "REG_SZ"
}
}
};
return new Promise((resolve, reject) => {
regedit.putValue(valuesToPut, (err) => {
if (err)
{
return reject("Erro ao modificar o registro: " + err);
}
console.log("IP de saida alterado");
console.log("Hostname de saida alterado");
resolve();
});
});
}
async function restartService() {
try {
await execAsync("net stop MESMTPCS && net start MESMTPCS");
console.log("Servico MESMTPCS reiniciado com sucesso");
} catch (error) {
console.error("Erro ao reiniciar o servico SMTP: " + error.message);
}
}
async function main() {
console.log(">> Comando Iniciado <<");
console.log("randomIP: " + randomIP);
console.log("randomHostname: " + randomHostname);
try {
await modifyRegistry();
await restartService();
console.log("Entrada Atualizada com Sucesso");
} catch (error) {
console.error("Falha em Atualizar Entrada", error);
} finally {
process.exit();
}
}
main();
Onde temos apenas que configurar os IPs/Hostnames no array "servers":
const servers = [
{ ip: "1.0.0.1", hostname: "mail1.teste.com.br" },
{ ip: "1.0.0.2", hostname: "mail2.teste.com.br" },
{ ip: "1.0.0.3", hostname: "mail3.teste.com.br" },
{ ip: "1.0.0.4", hostname: "mail4.teste.com.br" }
];
Você pode baixar o repositório completo pelo link abaixo:
Depois disto, basta adicionar este script em um agendamento no windows, para que seja aberto de tempos em tempos, seguindo o tutorial abaixo:
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟