Estoy intentando enviar un correo electrónico usando Nodemailer y Twilio Sendgrid, siguiendo el tutorial aquí . Por lo que sé, estoy siguiendo las instrucciones del tutorial, así como la documentación de Nodemailer y Sendgrid . Cada vez que se llama a este método, se ejecuta el código en el bloque catch y aparece el error Error: Missing credentials for "PLAIN" .
Mi pregunta se cerró debido a la asociación con la pregunta aquí , sin embargo, mi problema es diferente y no se aplica ninguna de las soluciones en el hilo. Estoy usando mi propio dominio para enviar, no gmail.com. Quiero resolver el problema sin usar Oauth2, que por lo que entiendo no debería necesitar, dado que estoy usando un dominio de correo electrónico que controlo. Además, ya estoy usando pass' rather than 'password para mis datos de autorización (la solución principal en la respuesta asociada).
¡He estado atascado en esto durante unos días y agradecería cualquier información que alguien pueda ofrecer!
Aquí está mi código:
async function sendEmail(email, code) { try{ const smtpEndpoint = "smtp.sendgrid.net"; const port = 465; const senderAddress = 'Name "contact@mydomain.com"'; const toAddress = email; const smtpUsername = "apikey"; const smtpPassword = process.env.SG_APIKEY; const subject = "Verify your email"; var body_html = `<!DOCTYPE> <html> <body> <p>Your authentication code is : </p> <b>${code}</b> </body> </html>`; let transporter = nodemailer.createTransport({ host: smtpEndpoint, port: port, secure: true, auth: { user: smtpUsername, pass: smtpPassword, }, logger: true, debug: true, }); let mailOptions = { from: senderAddress, to: toAddress, subject: subject, html: body_html, }; let info = await transporter.sendMail(mailOptions); return { error: false }; } catch (error) { console.error("send-email-error", error); return { error: true, message: "Cannot send email", }; } }¡Gracias!
Ya identificó el problema de la clave API que no se pasa al transporte de Nodemailer. Si bien codificar la clave es una posible solución, no es una buena práctica. Por lo general, los secretos y las claves se administran a través de variables de entorno, por lo que, por ejemplo, no se asignan accidentalmente a un repositorio y se pueden configurar externamente sin cambiar el código.
En el tutorial que vinculó, se aborda el trabajo con la variable de entorno, pero veo que hay un error con el archivo .env . Así que permítanme intentar recapitular cómo obtener correctamente SG_APIKEY de la variable de entorno y el archivo .env .
.env con los siguientes contenidos: SG_APIKEY=<your_sendgrid_api_key> (obviamente, reemplace <your_sendgrid_api_key> con su clave API real)dotenv esté instalado: npm i dotenv require("dotenv").config(); Esto asegurará que SG_APIKEY se cargue desde el archivo .env .console.log(process.env.SG_APIKEY)