Recuerda que en las ciencias informáticas cualquier problema suele tener diversas resoluciones, no obstante nosotros aquí te mostramos lo mejor y más eficiente.
Solución:
Notas del autor de esta respuesta original:
Entonces, finalmente me las arreglé para resolverlo. Me sorprende que no haya podido encontrar más recursos al respecto, así que para aquellos que necesitan usar
Gmail
conNodemailer
Encontré la respuesta aquí: http://masashi-k.blogspot.fr/2013/06/sending-mail-with-gmail-using-xoauth2.html
Intente crear un nuevo usuario si ya tenía uno y las cosas no funcionan bien. Fue el caso para mí.
Espero que esto le sea de utilidad a alguien,
Salud
Pregunta 1: ¿Qué es exactamente un token de actualización?
De la documentación que se encuentra aquí:
Un token de actualización proporciona a su aplicación acceso continuo a las API de Google mientras el usuario no está conectado a su aplicación.
(…)
Consideraciones:
Asegúrese de almacenar el token de actualización de forma segura y permanente, porque solo puede obtener un token de actualización la primera vez que realiza el flujo de intercambio de código.
Hay límites en la cantidad de tokens de actualización que se emiten: un límite por combinación de cliente / usuario y otro por usuario en todos los clientes. Si su aplicación solicita demasiados tokens de actualización, puede encontrarse con estos límites, en cuyo caso los tokens de actualización más antiguos dejan de funcionar.
Consulte también Acceso sin conexión y Uso de un token de actualización.
Pregunta 2: ¿Cómo consigo uno?
Paso 1: Obtenga las credenciales de OAuth 2.0 en Google Developers Console
Como se indica aquí, debe:
- Vaya a Google Developers Console.
- Seleccione un proyecto o cree uno nuevo.
- En la barra lateral de la izquierda, expanda API y autenticación. A continuación, haga clic en API. Selecciona el API habilitadas enlace en la sección de API para ver una lista de todas sus API habilitadas. Asegúrese de que la “API de Gmail” esté en la lista de API habilitadas. Si no lo ha habilitado, seleccione la API de Gmail de la lista de API (en API de Google Apps), luego seleccione el Habilitar API botón para la API.
- En la barra lateral de la izquierda, seleccione Cartas credenciales.
- Si aún no lo ha hecho, cree las credenciales OAuth 2.0 de su proyecto haciendo clic en Crear una nueva identificación de clientey proporcionar la información necesaria para crear las credenciales.
- Busca el Identificación del cliente y Secreto del cliente en la tabla asociada a cada una de sus credenciales.
PRESTE UNA ATENCIÓN ESPECIAL A especificando
https://developers.google.com/oauthplayground
como un Redirigir URI cuando crea un nuevo usuario en la consola. De lo contrario, tendrá un error.
Paso 2: Obtenga el token de actualización en Google OAuth2.0 Playground
- Vaya a Google Oauth2.0 Playground.
- Haga clic en el Botón de engranaje en la parte superior derecha. Establecer su Identificación del cliente y Secreto del cliente obtenido de Google Developers Console y seleccione Ubicación del token de acceso como Encabezado de autorización con portador prefix. Cierre esta superposición de configuración.
- Configure los ámbitos. Usar
https://mail.google.com/
ya que es la única necesidad pornodemailer
. Luego haga clic en el Autorizar API botón.
- Después de la autorización OAuth2.0, intercambie el código de autorización por tokens y voilá! su token de actualización está listo para usar
Para aquellos que han estado buscando un ejemplo funcional / fragmento de código, siga la Respuesta de Radioreve hasta que pueda obtener el token de acceso y el token de actualización. (Básicamente, vaya al patio de recreo, asegúrese de que solicite acceso para enviar correo y mail.google.com, otorgue permiso, cambie el código de autorización por tokens)
Tenga en cuenta que el expires
la hora en que entré fue new Date().getTime() + 2000
que estuvo cerca de los segundos de expiración vistos en el patio de recreo. No estoy seguro de si tuve que ingresar el token de acceso y el tiempo de vencimiento con precisión, ya que parece actualizar el token automáticamente.
Utilice este código de muestra escrito en ECMAScript 6:
const user_name = '[email protected]';
const refresh_token = '';
const access_token = '';
const client_id = '';
const client_secret = '';
const email_to = '[email protected]';
const nodemailer = require('nodemailer');
let transporter = nodemailer
.createTransport(
service: 'Gmail',
auth:
type: 'OAuth2',
clientId: client_id,
clientSecret: client_secret
);
transporter.on('token', token =>
console.log('A new access token was generated');
console.log('User: %s', token.user);
console.log('Access Token: %s', token.accessToken);
console.log('Expires: %s', new Date(token.expires));
);
// setup e-mail data with unicode symbols
let mailOptions =
from : user_name, // sender address
to : email_to, // list of receivers
subject : 'Hello ✔', // Subject line
text : 'Hello world ?', // plaintext body
html : 'Hello world ?', // html body
auth :
user : user_name,
refreshToken : refresh_token,
accessToken : access_token,
expires : 1494388182480
;
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info)
if (error)
return console.log(error);
console.log('Message sent: ' + info.response);
);
valoraciones y comentarios
Si estás contento con lo expuesto, tienes la habilidad dejar un enunciado acerca de qué te ha impresionado de este tutorial.