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

2024-02-29

目标是让用户在表单中输入一些信息并将其输出到 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 <[email protected] /cdn-cgi/l/email-protection>',
            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 <[email protected] /cdn-cgi/l/email-protection>',
          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);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将生成的PDF发送到谷歌云功能以使用nodemailer发送电子邮件 的相关文章

  • javascript 使用 onclick 创建按钮

    我正在尝试使用 javascript 创建一个具有 onclick 事件的按钮 该事件调用 head 中定义的函数 该函数接收相对于按钮的 dom 对象作为参数 我该怎么做呢 ex
  • 您可以使用 JavaScript 触发自定义 HTML5 表单错误吗?

    如果我有一个像这样的输入
  • AngularJS 使用 $apply 而不使用 $scope

    我开始使用 AngularJS 并且接受了用它来编写控制器的约定 而不是用 scope 所以我的控制器看起来像这样 myApp controller SomeController function this myModel id 1 nam
  • 如何在光标下的所有元素上调用 mouseover?

    我有一个网络应用程序 每次单击时都会创建一个点 见下文 当我将鼠标悬停在一堆点上时 我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件 然而 只有一个事件被触发 即堆栈 顶部 的点的事件 当鼠标移动到一堆多个点
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • Three.js - 在代码中包含网格数据

    我有这个 Three js 代码 其中 JSON 加载器从文件 models mountain json 加载网格 var Three new function this scene new THREE Scene this camera
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 从未定义解构时避免错误

    可以说我有这个代码 const x y point Babel 会将其变成 var point point x point x y point y 这很好 但是如果点未定义怎么办 现在我得到一个错误 Cannot read property
  • 是否可以覆盖 javaScript 原始数据类型?

    问题是不言自明的 我知道可以扩展原始数据类型 例如string但有可能覆盖它吗 这是在采访中被问到的一个问题 不 你不能覆盖任何东西 Ecma脚本定义原始类型 http es5 github com x4 3 2 Undefined Nul
  • 在 Angular2 项目中集成 Treant-js

    我正在尝试在 Angular2 项目中使用 treant js 但我正在努力解决如何正确集成它的问题 我有一个工作正常的 JavaScript HTML 示例 我正在尝试在 Angular2 中工作 我创建了一个组件 从 npm 添加了 t
  • 具有行组的 JQuery 斑马条纹表

    我通常将斑马条纹表行设置为奇数 偶数 如下所示 效果很好 table tbody tr visible even this addClass even table tbody tr visible odd this addClass odd
  • Telegram 授权无默认按钮

    使用 Telegram 第 3 方授权的唯一有记录的方法是使用其提供的脚本https core telegram org widgets login https core telegram org widgets login 这个脚本 正如
  • FIRApp 链接器错误 [“_OBJC_CLASS_$_FIRApp”]

    我已经搜索过 SO 和 Google 但找不到有效的答案 我已经在多个项目中使用了新的 Firebase Cocoapod 但是现在 当将其添加到不同的项目时 我收到以下错误 我正在使用 Xcode 7 3 1 和 cocoapods 1
  • 专用网络:web3.eth.getAccounts() 始终发送空数组

    我正在运行一个私人以太坊网络 我确实用https aws amazon com blockchain templates 整个设置已经完成 AWS 上的设置看起来正确 现在 我正在尝试创建帐户并检索所有这些帐户 为此 我使用以下方法 Web
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • 将 NPM 包客户端与 nuxt 结合使用

    我对 nuxt 和 javascript 非常陌生 我正在尝试弄清楚如何在客户端使用我的应用程序的依赖项 我将它们列在我的 nuxt config js 中并使用 npm 安装 我也有一个文件 plugins导入它们的目录 不确定这是否好
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 常规 JavaScript 可以与 jQuery 混合使用吗?

    例如 我可以采用这个脚本 来自 Mozilla 教程 https developer mozilla org en Canvas tutorial Basic usage
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne
  • 获取淘汰赛中被点击元素的索引

    获取无序列表中单击元素的索引的最佳方法是什么 让我举个例子 假设我有以下 HTML 代码 ul li p p li ul 现在我有以下 javascript 代码来获取索引 self itemClicked function data it

随机推荐