MailEnable - Randomizando IP de Saída do SMTP

Aprenda a randomizar o IP de saída do SMTP no MailEnable. Este guia mostra como modificar o registro usando um script em Node.js, permitindo a atualização dinâmica do IP e do hostname. Melhore suas entregas de e-mail com esta solução prática!

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:

regedit
Read, Write, List and do all sorts of funky stuff to the windows registry using node.js and windows script host. Latest version: 5.1.3, last published: 7 months ago. Start using regedit in your project by running `npm i regedit`. There are 82 other projects in the npm registry using regedit.

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:

GitHub - cmacetko/MailEnableRandomIP2
Contribute to cmacetko/MailEnableRandomIP2 development by creating an account on GitHub.

Depois disto, basta adicionar este script em um agendamento no windows, para que seja aberto de tempos em tempos, seguindo o tutorial abaixo:

Nodejs: Iniciando script automaticamente com o windows
Iniciando Scripts Node.js no Windows: Saiba como configurar o Task Scheduler para iniciar automaticamente scripts Node.js, assim que o servidor Windows iniciar

Por hoje é só, meus unicórnios! 🦄✨

Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟