const fetch = require('node-fetch'); const htmlToText = require('html-to-text'); const Busboy = require('busboy'); // const inspect = require('util').inspect; const webhookUrl = process.env.WEBHOOK_DISCORD; function create_message(fields){ message = "From: "+ fields.from + "\n" + "To: "+ fields.to + "\n" + "Subject: "+ fields.subject + "\n" + "Body: "+ (fields.text || htmlToText.fromString(fields.html)) + "\n"; return message } async function send_message(fields){ const url = webhookUrl; const body = { content: create_message(fields) }; const options = { method: 'POST', body: JSON.stringify(body), headers: { 'Content-Type': 'application/json' }, }; return await fetch(url, options); } /** * HTTP Cloud Function that makes an HTTP request * * @param {Object} req Cloud Function request context. * @param {Object} res Cloud Function response context. */ exports.makeRequest = async (req, res) => { if (req.method != 'POST') return res.sendStatus(405); // method not allowed // console.log("Mail coming"); var fields = {}; var busboy = new Busboy({ headers: req.headers }); busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) { // console.log('Field [' + fieldname + ']: value: ' + inspect(val)); fields[fieldname] = val; }); busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { // console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype); file.on('data', function(data) { // console.log('File [' + fieldname + '] got ' + data.length + ' bytes'); }); file.on('end', function() { // console.log('File [' + fieldname + '] Finished'); }); }); busboy.on('finish', async () => { // console.log('Done parsing form!'); const externalRes = await send_message(fields); res.sendStatus(externalRes.ok ? 200 : 500); }); busboy.end(req.rawBody); };