Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

224
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!