node-fetch 流文件到 nodemailer,然后 nodemailer 将文件作为附件发送
Posted
技术标签:
【中文标题】node-fetch 流文件到 nodemailer,然后 nodemailer 将文件作为附件发送【英文标题】:node-fetch stream file to nodemailer, and then nodemailer to send the file as attachment 【发布时间】:2022-01-16 09:49:24 【问题描述】:我正在尝试使用 node-fetch 发送文件以及 Nextjs 中状态的其他字段。 目标不是将文件存储在服务器上(即使是暂时的),而是在用户将表单提交到 Nodemailer 时从 Web 浏览器流式传输,然后从 Nodemailer 以附件的形式发送电子邮件以及其他信息。
客户:
const handleFile = (e) =>
let file = e.target.files[0];
let attachment = new FormData();
attachment.append("file", file);
fetch(`route`,
method: "POST",
headers: ,
body: attachment,
)
.then((response) =>
if (response.ok) console.log("Uploaded");
else console.log("Error");
)
.catch((error) =>
console.log(error);
);
SMTP:
const nodemailer = require("nodemailer");
async function main(subject, html, to, file)
let transporter = nodemailer.createTransport(
// mail server setup
);
let attachment = [];
if (file)
attachment = [
filename: file.file[0].originalFilename,
path: file.file[0].path,
,
];
const mailOptions =
from: from,
to: to,
subject: subject,
html: html,
attachments: attachment,
;
try
let info = await transporter.sendMail(mailOptions);
console.log(info);
catch (error)
console.error(error, "fail to send email");
API:
const express = require("express");
const router = express.Router();
const multiparty = require("multiparty");
const sendEmail = require("../../utilities/SMTP");
router.post("/route", (req, res) =>
var form = new multiparty.Form();
form.parse(req, function (err, fields, files)
sendEmail(
"Career Attachment",
contactEmail(fields),
"to@mail.com",
files
);
res.send("Your Request Sent Successfully");
);
);
编辑:我可以使用上述代码将文件作为附件流式传输。
需要改进。【问题讨论】:
【参考方案1】:你应该使用 formData 并将你的文件附加到它上面,就像下面的代码一样
let file = e.target.files[0];
let formData = new FormData();
formData.append("file", file);
如果你想让它是动态的并上传多个文件,你可以像下面这样编写你的函数
let files = e.target.files;
let formData = new FormData();
for (let i = 0; i < files .length; i++)
formData.append("file", files [i]);
【讨论】:
以上是关于node-fetch 流文件到 nodemailer,然后 nodemailer 将文件作为附件发送的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 和 Nodemailer:我们可以将 PDF 文档附加到电子邮件中吗?
使用 Sendgrid/Nodemailer 将 Angular 表单数据发布到 Node.js
如何在nodejs中使用nodemailer进行批量数据发送?
在发布路线上使用 nodemailer 发送电子邮件并使用 passport.authenticate 将用户保存到 mongodb