msgeml-pdf-jpeg
Version:
Converte arquivos .msg (Outlook) e .eml (Gmail) em PDFs e JPEG com formatação e imagens preservadas.
82 lines (65 loc) • 2.77 kB
JavaScript
const puppeteer = require('puppeteer-core');
const chromeLauncher = require('chrome-launcher');
const { parseMsgFile } = require('./extractMsg');
const { parseEmlFile } = require('./extractEml');
const { converter } = require('./utils/convert');
async function getChromePath() {
const paths = chromeLauncher.Launcher.getInstallations();
if (!paths.length) throw new Error('Chrome não encontrado no sistema. Instale o Chrome ou use imagem Docker com o navegador embutido.');
return paths[0]; // pega o primeiro encontrado
}
async function convertMSGFile(file, extension) {
try {
if (!extension || !['pdf', 'jpeg'].includes(extension)) {
throw new Error("Parâmetro 'extension' é obrigatório e deve ser 'pdf' ou 'jpeg'");
}
const parsed = await parseMsgFile(file);
if (!parsed) {
throw new Error('Falha ao analisar o arquivo .msg');
}
const outputFile = file.replace(/\.msg$/i, `.${extension}`);
const executablePath = await getChromePath();
const browser = await puppeteer.launch({
headless: 'new',
executablePath,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
await page.setContent(parsed.html, { waitUntil: 'networkidle0' });
await converter(page, outputFile, extension);
await page.close();
await browser.close();
return { success: true };
} catch (err) {
console.error('Erro ao converter .msg:', err);
return { success: false, err };
}
}
async function convertEMLFile(file, extension) {
try {
if (!extension || !['pdf', 'jpeg'].includes(extension)) {
throw new Error("Parâmetro 'extension' é obrigatório e deve ser 'pdf' ou 'jpeg'");
}
const parsed = await parseEmlFile(file);
if (!parsed) {
throw new Error('Falha ao analisar o arquivo .eml');
}
const outputFile = file.replace(/\.eml$/i, `.${extension}`);
const executablePath = await getChromePath();
const browser = await puppeteer.launch({
headless: 'new',
executablePath,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
await page.setContent(parsed, { waitUntil: 'networkidle0' });
await converter(page, outputFile, extension);
await page.close();
await browser.close();
return { success: true };
} catch (err) {
console.error('Erro ao converter .eml:', err);
return { success: false, err };
}
}
module.exports = { convertMSGFile, convertEMLFile };