Solución:
Lo siguiente funcionó para mí, hay dos partes:
01) app.js
02) Google
y OAuth2
configuración
app.js
var nodemailer = require("nodemailer");
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: local_settings.my_gmail_username,
clientId: local_settings.my_oauth_client_id,
clientSecret: local_settings.my_oauth_client_secret,
refreshToken: local_settings.my_oauth_refresh_token,
accessToken: local_settings.my_oauth_access_token
}
});
var mail = {
from: "John Smith <[email protected]>",
to: "[email protected]",
subject: "Registration successful",
text: "You successfully registered an account at www.mydomain.com",
html: "<p>You successfully registered an account at www.mydomain.com</p>"
}
transporter.sendMail(mail, function(err, info) {
if (err) {
console.log(err);
} else {
// see https://nodemailer.com/usage
console.log("info.messageId: " + info.messageId);
console.log("info.envelope: " + info.envelope);
console.log("info.accepted: " + info.accepted);
console.log("info.rejected: " + info.rejected);
console.log("info.pending: " + info.pending);
console.log("info.response: " + info.response);
}
transporter.close();
});
Configuración de Google y OAuth
El código anterior requiere la siguiente configuración:
01)
Vaya a https://console.developers.google.com
02)
Si no tiene un proyecto, se le pedirá que cree uno
03)
Haga clic en Create Project
04)
Haga clic en Create
05)
Entrar a Project Name
y haga clic en Create
06)
Selecciona el Gmail API
07)
Haga clic en Enable
08)
Haga clic en Create Credentials
09)
Ingrese la configuración requerida
10)
Asigne un nombre al cliente de OAuth y asegúrese de agregar https://developers.google.com/oauthplayground
como un redirect URI
con el fin de generar el refresh
y access
tokens más tarde
11)
Definir la configuración de la pantalla de consentimiento
12)
Hacer clic I'll do this later
y Done
13)
Clickea en el Edit
icono, para ver su Client ID
y Client Secret
14)
Para generar access
y refresh
tokens, vaya a https://developers.google.com/oauthplayground
15)
Clickea en el cog
icono en la parte superior derecha, marque Use your own OAuth credentials
y entrar Client ID
y Client Secret
16)
En la columna de la izquierda, seleccione Gmail API v1
y haga clic en Authorise APIs
17)
Si ha iniciado sesión en varias cuentas, cuando se le solicite, seleccione la cuenta correspondiente
18)
Hacer clic Allow
19)
Hacer clic Exchange authorisation code for tokens
No estoy seguro de por qué hay una cuenta regresiva en el access
token, pero con suerte el mensaje en la parte inferior de la pantalla significa que el token no caducará.
Pantalla de consentimiento de OAuth
Definitivamente tiene razón sobre las lagunas y la información desactualizada, e hizo un gran trabajo al documentar los pasos necesarios para usar Gmail con OAuth y nodemailer. No obstante, creo que vale la pena mencionar que en la página de Credenciales hay otro paso: el Pantalla de consentimiento de OAuth pestaña.
Contiene un formulario como el envío de una aplicación de Google Play que requiere la validación de Google, si elige que su aplicación no sea validada, tiene una limitación de 100 llamadas de lo que ellos llaman Visores sensibles antes de que se le solicite la presentación.
¿Qué pasa con la cuota?
Todavía no tengo claro si esta cuota de 100 llamadas se consumirá incluso si no selecciona ningún permiso adicional para usar ámbitos sensibles (los predeterminados son correo electrónico, perfil, openid). Espero que no, ya que la pantalla de consentimiento de OAuth solicita cosas como Enlace a la página de inicio de la aplicación y Dominios autorizados eso es algo que quizás no tenga si está trabajando en una aplicación de backend.
Creo que todo este procedimiento es realmente lento e inútilmente complejo, ya que la mayoría de las personas siguen todos estos pasos para enviar un correo electrónico desde su aplicación utilizando nodemailer …