Nodemailer无法发送电子邮件附件

时间:2021-01-26 15:22:17

标签: javascript reactjs express multer nodemailer

我尝试使用 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,但现在它甚至无法发送电子邮件。

0 个答案:

没有答案