gmailclient
Version:
Cliente para enviar correos, incluir attachments, guardar listas de distribución
68 lines (56 loc) • 2.51 kB
JavaScript
// Cargar librerias principales
const fs = require('fs');
const path = require('path');
const { google } = require('googleapis');
const readline = require('readline');
const signale = require('signale');
const global = signale.scope('global scope');
const { productionPathInit } = require('../config/conf')
module.exports.run = (credentials) => {
// Guardar credentials en archivo credentials.json
const credentialsPath =
path.join(__dirname, `${productionPathInit}/config/access/credentials.json`);
// Recuperar credenciales, para poder crear un cliente
fs.readFile(credentialsPath, (err, content) => {
if (err) {
global.fatal(err.message)
global.fatal('No file "credentials.json" found');
}
else {
global.pending('pending authentication!')
const credentials = JSON.parse(content);
// Crear el cliente con las credenciales
const oAuthClient = new google.auth.OAuth2(
credentials.installed.client_id,
credentials.installed.client_secret,
credentials.installed.redirect_uris[0]
);
// Generar la url de autorizacion: cliente.generateAuthUrl
const authUrl = oAuthClient.generateAuthUrl({
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/gmail.send'
})
// Con esta url el usuario copia, va y acepta en un navegador y recupera code
global.info(`Download the confirmation code of: ${authUrl} \n`);
// El usuario ingresa el codigo de autorizacion obtenido del navegador
const cmdline =
readline.createInterface({ input: process.stdin, output: process.stdout });
cmdline.question('Ingrese Codigo: ', code => {
cmdline.close();
global.watch(code);
// El cliente creado solicita un token con dicho codigo
oAuthClient.getToken(code, (err, token) => {
if (err) return console.log(`Error Getting token:\n', ${err.message}`);
// Se guarda el token obtenido (que viene como un json)
const tokenPath = path.join(__dirname, '../config/access/token.json');
fs.writeFile(tokenPath, JSON.stringify(token), (err) => {
if (err) return global.fatal(`Error Saving token:\n", ${err.message}`);
global.success(`Token expiration date: ${new Date(token.expiry_date)}`);
global.complete('credentials was generated!');
})
})
})
}
})
}