gpt4 book ai didi

javascript - 尝试将生成的PDF发送到谷歌云功能以使用nodemailer发送电子邮件

转载 作者:行者123 更新时间:2023-12-02 22:14:37 25 4
gpt4 key购买 nike

目标是让用户在表单中输入一些信息并将其输出到 PDF 中。我正在使用 JSPDF 来解析和创建 PDF。我已经成功获得了制作可打印 PDF 的代码,但为了避免办公室里到处都是纸张,我制作了一个云功能来将该 PDF 通过电子邮件发送给客户。

这是我的前端代码。 maildoc是我制作的pdf,它还没有被打印或任何东西。所以它只存在于内存中。

mailDoc = mailDoc.output('datauri');
mailFunction += "&?data=" + mailDoc;

//axios request to the cloud function
axios.get(mailFunction).then( function (response) {
console.log(response);
}).catch(function (error) {
console.log(error)
})

这是我在云函数上的代码

exports.sendMail = functions.https.onRequest((req, res) => {
cors(req, res, () => {

// getting dest email by query string
//?dest= DestinationEmail
const dest = req.query.dest;
const data = req.query.data;



const mailOptions = {
from: 'whatever <whatever@hoobashaka.com>',
to: dest,
subject: "You're Equipment Return to HBCI", // email subject
attachments :[
{
filename: 'return.pdf',
contentType: 'application/pdf',
path: data,
}
],
};
return transporter.sendMail(mailOptions, (erro, info) => {
if(erro){
return res.send(erro.toString());
}
return res.send('Sended');
});
});

如果我尝试通过 URI 发送数据,我会收到 413 错误,可能是因为该 URI 很大。但我想不出另一种将生成的 PDF 发送到该函数的方法。

最佳答案

在您的客户端上,我不会将文件作为 datauri 上传,而是使用 POST 并在请求正文中发送 PDF(就像您使用表单提交文件一样) .

mailDocBlob = mailDoc.output('blob');

const data = new FormData();
data.set('dest', someEmail);
data.append('file', mailDocBlob, 'return.pdf');

axios({
method: 'post',
url: 'https://your-cloud-function.here/sendMail',
data: data,
headers: {
'Content-Type': `multipart/form-data; boundary=${data._boundary}`,
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

在服务器上,您将使用 busboy 包处理多部分表单数据。

const BusBoy = require('busboy');

exports.sendMail = functions.https.onRequest((req, res) => {
cors(req, res, (err) => {
if (err) {
// CORS failed. Abort.
console.log("CORS failed/rejected");
res.sendStatus(403); // 403 FORBIDDEN
return;
}

if (req.method !== 'POST') {
res.set('Allow', 'POST, OPTIONS').sendStatus(405); // 405 METHOD_NOT_ALLOWED
return;
}

let busboy = new BusBoy({headers: req.headers, limits: {files: 1}}); // limited to only a single file

const mailOptions = {
from: 'whatever <whatever@hoobashaka.com>',
to: dest,
subject: "Your Equipment Return to HBCI", // email subject - fixed typo
attachments: []
};

busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
// add new file attachment
mailOptions.attachments.push({
filename: 'return.pdf',
contentType: 'application/pdf',
content: file, // file is a stream
});
})
.on('finish', () => {
if (mailOptions.attachments.length == 0) {
// not enough attachments
res.status(400).send('Error: not enough attachments');
return;
}

return transporter.sendMail(mailOptions, (erro, info) => {
if (erro) {
return res.status(500).send('Error: ' + erro.toString());
}
return res.send('Sent');
})
})
.on('error', (err) => {
console.error(err);
res.status(500).send('Error: ' + err.code);
});

req.pipe(busboy);
});

关于javascript - 尝试将生成的PDF发送到谷歌云功能以使用nodemailer发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com