UNPKG

gmailclient

Version:

Cliente para enviar correos, incluir attachments, guardar listas de distribución

66 lines (59 loc) • 2.42 kB
const { google } = require('googleapis'); const fs = require('fs'); const { productionPath } = require('../config/conf') const TOKEN_PATH = `${productionPath}/src/config/access/token.json`; const CREDENTIALS_PATH = `${productionPath}/src/config/access/credentials.json` const MailError = require('./errors'); class Mail { /** * * @param {*} message */ send(message) { return new Promise((resolve, reject) => { try { // Cargar credenciales contenidas en el credentials.json fs.readFile(CREDENTIALS_PATH, (err, content) => { if (err) { reject({ message: `Error loading client secret file: ${err.message}` }) } else { // Autorizar a un cliente Google API a realizar llamadas const credentials = JSON.parse(content); const { client_secret, client_id, redirect_uris } = credentials.installed; const oAuth2Client = new google.auth.OAuth2( client_id, client_secret, redirect_uris[0]); // Recuperar el token almacenado para realizar llamadas a gmail fs.readFile(TOKEN_PATH, (err, token) => { if (err) { reject({ message: 'No token found' }) } else { oAuth2Client.setCredentials(JSON.parse(token)); // Crear un cliente de gmail y autorizarlo para enviar mensajes const gmail = google.gmail({ version: 'v1', oAuth2Client }); let config = { auth: oAuth2Client, userId: 'me', resource: { raw: message.base64URLEnconded() } } // Enviar el mensaje en formato base64URL gmail.users.messages.send(config, (err, response) => { if (err) { reject(new MailError(err.message, err.response.status)) } else { console.log(`[MAIL-RESPONSE] --- ${response.data.id} - ${response.status} - ${response.statusText}`); resolve(response.status) } }); } }); } }); } catch (error) { reject(new MailError(error.message, 'ERROR_APP_MODULE')) } }) } } module.exports = Mail;