我尝试使用 Nodemailer 从我前端的文件输入发送电子邮件附件,但它似乎不起作用。有人知道怎么回事吗?
这是我的前端:
class FormTranslation extends Component {
constructor() {
super();
this.state = {
name: "",
email: "",
uploadFile: null,
status: "Submit",
};
}
handleChange(event) {
const field = event.target.name;
if (field === "name") {
this.setState({ name: event.target.value });
} else if (field === "email") {
this.setState({ email: event.target.value });
} else if (field === "uploadFile") {
this.setState({ uploadFile: event.target.files});
}
}
handleSubmit(event) {
event.preventDefault();
this.setState({ status: "Sending" });
axios({
method: "POST",
url: "http://localhost:5000/FormTranslation",
data: this.state,
}).then((response) => {
if (response.data.status === "sent") {
alert("Message Sent");
this.setState({
name: "",
email: "",
uploadFile: null,
status: "Submit",
});
} else if (response.data.status === "failed") {
alert("Message Failed");
}
});
}
我是这样渲染的:
render() {
let buttonText = this.state.status;
return (
<div>
<Form
onSubmit={this.handleSubmit.bind(this)}
method="POST"
encType="text/plain"
className="titleFont"
>
<Form.Control
placeholder="Name"
type="text"
id="name"
name="name"
value={this.state.name}
onChange={this.handleChange.bind(this)}
required
/>
<Form.Control
type="email"
placeholder="Email"
id="email"
name="email"
value={this.state.email}
onChange={this.handleChange.bind(this)}
/>
<Form.File
type="file"
label="Upload File"
id="uploadFile"
name="uploadFile"
multiple
encType="multipart/form-data"
onChange={this.handleChange.bind(this)}
/>
<Button type="submit">
{buttonText}
</Button>
</Form>
</div>
);
}
}
export default FormTranslation;
这是我的后端:
const multer = require("multer");
const nodemailer = require("nodemailer");
const { contactEmail } = require("../../helpers");
router.post("/FormTranslation", (req, res) => {
const name = req.body.name;
const email = req.body.email;
const uploadFile = req.body.uploadFile;
let mail = {
from: email,
to: "my@email.com",
subject: "Submisson",
html: `<p>Name: ${name}</p>
<p>Email: ${email}</p>`,
attachments: [
{
filePath: uploadFile,
},
],
};
contactEmail.sendMail(mail, (error) => {
if (error) {
res.json({ status: "failed" });
} else {
res.json({ status: "sent" });
}
});
});
我总是收到“消息失败!”警报。我尝试了一个没有 multer 的不同选项,它成功发送了一封带有附件的电子邮件,但附件已损坏。 然后我尝试了multer,但现在它甚至无法发送电子邮件。