Saltar al contenido

Nodemailer / Gmail: ¿qué es exactamente un token de actualización y cómo puedo obtener uno?

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 con Nodemailer

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:

  1. Vaya a Google Developers Console.
  2. Seleccione un proyecto o cree uno nuevo.
  3. 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.
  4. En la barra lateral de la izquierda, seleccione Cartas credenciales.
  5. 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.

Imagen de la publicación del blog vinculada arriba

  1. Busca el Identificación del cliente y Secreto del cliente en la tabla asociada a cada una de sus credenciales.

Imagen de la publicación de blog vinculada arriba


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

  1. Vaya a Google Oauth2.0 Playground.
  2. 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.

Imagen de la publicación de blog anterior

  1. Configure los ámbitos. Usar https://mail.google.com/ ya que es la única necesidad por nodemailer. Luego haga clic en el Autorizar API botón.

ingrese la descripción de la imagen aquí

  1. 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

Imagen de la publicación de blog especificada anteriormente

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *