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);
};