Как разобрать двоичный файл и добавить его в качестве вложения электронной почты - PullRequest
0 голосов
/ 27 марта 2020

Я создаю контактную форму и мне нужно добавить вложение, загруженное из формы, и добавить его в шаблон электронной почты.

Я использую Formdata для отправки запроса req, но в Backend, Я не уверен, как проанализировать данные формы и добавить их в приложение "nodeMailer"

. Во внешнем интерфейсе отправьте запрос POST по оси ios и добавьте formData в качестве данных

const sendContactMail = async uploadFile => {
  console.log("uploadFile3", uploadFile)

  const formData = new FormData()
  formData.append("file", uploadFile)

  try {
    const res = await axios({
      method: "post",
      url: "/api/contact",
      headers: {
        "Content-Type": `multipart/form-data`,
      },
      data: formData,
    })
    return res
  } catch (error) {
    return error
  }
}

в Backend, обработайте formData и добавьте его в почтовый шаблон

const mailer = ({ file }: MailerPros) => {
  const mailOptions = {
    from,
    to: `${recipientMail}`,
    subject: `New message from ${from} (Metrix Website)`,
    content,
    replyTo: from,
    html: `
      <h3>Dear ${recipientMail},</h3>
      <p>${firstName} ${lastName} (${emailAddress} has send you a <b>${formType}</b> request. His/her contact number is <b>${phoneNumber}</b>. He/she is interested in <b>${interest}</b>.
        <br/>Here is his/her meesage:</p>
      <p>"${content}"</p>
      `,
    to: "eric@serindlabs.com",
    attachments: [
      {
        filename: "text.pdf",
        contentType: file,
      },
    ],
  }

  return new Promise((resolve, reject) => {
    transporter.sendMail(mailOptions, (error, info) => {
      error ? reject(error) : resolve(info)
      transporter.close()
    })
  })
}

export default async (req: any, res: any) => {
  const form = formidable({ multiples: true })

  form.parse(req, ({ err, fields, files }: any) => {
    if (err) {
      throw err
    }
    res.writeHead(200, { "content-type": "application/json" })
    res.end(JSON.stringify({ fields, files }, null, 2))
  })

  const mailerRes = await mailer({ file })
  res.send(mailerRes)
}

...