I am trying to send emails from a firebase
function that I call from my vue
app. My firebase function looks like:
const functions = require('firebase-functions'); const admin = require("firebase-admin") const nodemailer = require('nodemailer'); admin.initializeApp() //google account credentials used to send email var transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: 'xxxxx@gmail.com', pass: 'xxxxxxxxxx' } }); exports.sendMail = functions.https.onRequest((req, res) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Content-Type"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization"); const mailOptions = { from: `•••••••••@gmail.com`, to: req.body.email, subject: 'contact form message', html: `<h1>Order Confirmation</h1> <p> <b>Email: </b>"hello<br> </p>` }; return transporter.sendMail(mailOptions, (error, data) => { console.log("here") if (error) { return res.send({"data": error.toString()}); } data = JSON.stringify(data) return res.send({"data": `Sent! ${data}`}); }); });
I removed the user and pass values here. They have the correct value in my code. The vue
method I use to call this function looks like:
sendEmail(){ let sendMail = firebase.functions().httpsCallable('sendMail'); sendMail( { email: 'xx@xx.xx.xx' } ).then( result => { console.log(result.data) } ) }
When this function is called I get the following error in the console:
Uncaught (in promise) Error: Response is not valid JSON object. at new e (index.cjs.js:58) at t.<anonymous> (index.cjs.js:543) at u (tslib.es6.js:100) at Object.next (tslib.es6.js:81) at s (tslib.es6.js:71)
Any help would be appreciated. Thanks
Advertisement
Answer
You must a return a valid JSON
result like this:
return res.status(200).json({});
Here the JSON is
{}
but it could be for instance something like {"status": "success}
.