Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

225
Visualizações
Mecanismo de reintento para enviar un correo electrónico desde un host diferente

Estoy enviando un correo electrónico usando nodemailer y en caso de que falle un envío, quiero usar un host diferente en un reintento.

Lo intenté:

 let tries = 0; let maxTries = 2; const sendEmail = async () => { tries += 1; if (tries === maxTries) return; const transporter = nodemailer.createTransport({ host: tries === 1 ? host1 : host2, port: port, secure: false }); // mailOptions object here.... await transporter.sendMail(mailOptions, (err, info) => { if (err) { return sendEmail(); } else { console.log('Email Sent Successfuly'); } }); }

Funciona pero se siente un poco engorroso.

¿Hay una mejor manera de implementar esta característica?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¿Qué tal algo como esto (actualizado por sugerencias de Bergi)?

 const sendEmail = async (mailOptions, hosts = [host1, host2]) => { if (hosts .length == 0) { return Promise .reject ('all hosts failed') } // configure transporter try { const info = await transporter .sendMail (mailOptions); return 'Email sent successfully'; } catch (err) { return sendEmail (option, hosts .slice (1)) } }

(Por favor, no use esta versión original, por la razón que señaló Bergi)

 // DO NOT USE const sendEmail = async (options, hosts = [host1, host2]) => { if (hosts .length == 0) { return Promise .reject ('all hosts failed') } // configure transporter return new Promise ((resolve, reject) => { transporter .sendMail (mailOptions, (err, info) => { if (err) { return sendEmail (option, hosts .slice (1)) } else { resolve ('Email Sent Successfuly'); } }) }) }

Podría extenderse fácilmente para manejar algo como:

 const hosts = [{host: host1, tries: 3}, {host: host2, tries: 1}, {host: host3, tries: 5}] sendMail (options, hosts)

para que probara el primer host tres veces, luego el segundo una vez, luego el tercero cinco veces antes de darse por vencido.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda