如何使用 nodemailer 从上传按钮发送附件

How to send an attachment from an upload button using nodemailer

我正在尝试创建一个网站,其中包含用户可以填写的表单以及通过输入标签上传图像或 docx 文件。我正在使用控制器,因为我也为此使用了 hbs。

const output = `<p>You have a new message from the TIPH website<p>
    <h3>Contact Details</h3>
    <p>Name: ${req.body.contact_name}<p>
    <h3>Inquiry</h3>
    <p>${req.body.contact_inquiry}</p>
    `;
    
    var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
          user: process.env.EMAIL,
          pass: process.env.PASSWORD
        }
      });
      
      var mailOptions = {
        from: `${req.body.contact_email}`,
        to: '...',
        subject: `${req.body.contact_subject}`,
        html: output,
        attachments: [
            {
                filename: `${req.body.contact_upload}`,
            }
        ]
      };
      
      transporter.sendMail(mailOptions, function(error, info){
        if (error) {
          console.log(error);
        } else {
          console.log('Email sent: ' + info.response);
          res.render('contact-us', {
            layout: '/layouts/main',
            title: 'Contact Us',
            contact_active: true,
            msg: 'Your message has been sent!'
        })
        }
      });

为了将文件上传到节点服务器,您应该将 HTML 表单元素的 enctype 属性设置为 enctype="multipart/form-data"

要使用文件服务器端,您可以使用 multer。此中间件使上传的文件可从 req.file 属性.

然后您可以将此文件添加到 attachments 数组。您可以在 documentation.

中找到需要发送给 Nodemailer 的道具