簡體   English   中英

為什么我的附件沒有在 Node.js 中發送?

[英]Why are my attachments not sending in Node.js?

我在嘗試從電子郵件表單發送圖像附件時仍然遇到問題。 我想要發生的是用戶提交一些信息,然后他們通過客戶端上傳圖像,然后當他們點擊提交時,該圖像作為電子郵件發送給我。 我一直無法讓它工作,我不知道為什么。 幾天來我一直在到處尋找,觀看教程,閱讀文檔,玩耍,閱讀答案並試圖解決這個問題,但顯然我不明白如何實現代碼以使附件與電子郵件一起出現並具有圖像當我在電子郵件中打開它時。 有人能幫我嗎? 這是我的代碼,謝謝:

const express = require("express");
const fileUpload = require("express-fileupload");
const nodemailer = require("nodemailer");
const app = express();
const creds = require("./config");
const cors = require("cors");

app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(fileUpload());
app.use(cors());

app.post("/api/form", (req, res) => {
  nodemailer.createTestAccount((err, account) => {
    const htmlEmail = `
      <h3>Contact Details</h3>
      <ul>
        <li>
          Name: ${req.body.name}
        </li>
        <li>
          Email: ${req.body.email}
        </li>     
      </ul>
       <h3>Message</h3>
      <p>${req.body.message}</p>
    `;

    let transport = nodemailer.createTransport({
      host: "some.service.email",
      port: ***,
      auth: {
        user: creds.USER,
        pass: creds.PASS,
      },
    });

    let mailOptions = {
      from: "test@test.com",
      to: "receiveTest@test.com",
      replyTo: "test@test.com",
      subject: "Test Message",
      text: req.body.message,
      html: htmlEmail,
      attachments: [ //The problem area. This won't appear in a sent email.
        {
          filename: "AdImage.jpg",
          content: req.body.file,
          contentType: "image/jpg",
        },
      ],
    };

    transport.sendMail(mailOptions, (err, info) => {
      if (err) {
        res.json({
          status: "fail",
        });
      } else {
        res.json({
          status: "success",
        });
      }
    });
  });
});

const PORT = process.env.PORT || 3001;

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

編輯:所以我稍微改變了代碼,看起來像這樣:

const express = require("express");
const bodyParser = require("body-parser");
const fileUpload = require("express-fileupload");
const nodemailer = require("nodemailer");
const app = express();
const creds = require("./config");
const cors = require("cors");
const fs = require("fs");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(fileUpload());
app.use(cors());

app.post("/api/form", (req, res) => {
  nodemailer.createTestAccount((err, account) => {
    console.log(req.files.file);
    const htmlEmail = `
      <h3>Contact Details</h3>
      <ul>
        <li>
          Name: ${req.body.name}
        </li>
        <li>
          Email: ${req.body.email}
        </li>     
      </ul>
       <h3>Message</h3>
      <p>${req.body.message}</p>
    `;

    let transport = nodemailer.createTransport({
      host: "some.service.email",
      port: ***,
      auth: {
        user: creds.USER,
        pass: creds.PASS,
      },
    });

    let mailOptions = {
      from: "test@test.com",
      to: "receiveTest@test.com",
      replyTo: "test@test.com",
      subject: "Test Message",
      text: req.body.message,
      html: htmlEmail,
      attachments: [
        {
          filename: req.files.file.name,
          content: new Buffer.from(req.files.file.name, "utf-8"),
        },
      ],
    };

    transport.sendMail(mailOptions, (err, info) => {
      if (err) {
        res.json({
          status: "fail",
        });
      } else {
        res.json({
          status: "success",
        });
      }
    });
  });
});

const PORT = process.env.PORT || 3001;

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

所以現在我的電子郵件正在獲取附件,但附件是空的,如果我嘗試下載它會返回服務器錯誤。 日志顯示文件。 它顯示了這一點:

name: 'myFile.jpg',
[0]   data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 02 01 01 01 01 01 02 01 01 01 02 02 02 02 02 04 03 02 02 02 02 05 04 04 03 ... 992910 more bytes>,
[0]   size: 992960,
[0]   encoding: '7bit',
[0]   tempFilePath: '',
[0]   truncated: false,
[0]   mimetype: 'image/jpeg',
[0]   md5: 'f383f6170d8a66f90be655690ee3f51e',
[0]   mv: [Function: mv]

我不明白為什么我仍然看不到附件中的實際圖像。 我還缺少什么? 謝謝你。

對於要表達的 post 請求,您必須使用正文解析器,這與 get 請求不同。 這是來自 npm 的一個: https ://www.npmjs.com/package/body-parser。

向下滾動 npm 頁面以查找有關如何使用它的一些示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM