gmailclient
Version:
Cliente para enviar correos, incluir attachments, guardar listas de distribución
66 lines (59 loc) • 2.42 kB
JavaScript
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;