客户端数据未到达服务器端...也许

KingdomB:

我有一个接触的形式,我试图用值来发送电子邮件给自己。服务器收到req.body,它出现在控制台,但是,我nodemailer文件是无法使用的数据。我得到一个状态代码“极品指定的参数......‘文本’或‘HTML’中的至少一个”无论是在mail.js和server.js是在根目录下,我使用jQuery则模块将数据传递到server.js .exports在mail.js到server.js但某处交换客户端的数据没有进入我的,即使它只是在server.js被调用在mail.js创建的对象。

以下是在我在mail.js减去敏感信息:

const nodemailer = require("nodemailer");
const mailGun = require("nodemailer-mailgun-transport");

const auth = {
  auth: {
    api_key: "...",
    domain: "..."
  }
};

const transporter = nodemailer.createTransport(mailGun(auth));

const sendMail = (name, subject, email, phone, message, cb) => {
  const mailOptions = {
    from: email, 
    to: "...", // TODO: the receiver email has to be authorized for the free 
         tier
    name,
    phone,
    subject,
    message
  };

  transporter.sendMail(mailOptions, function (err, data) {
    if (err) {
      cb(err, null);
    console.log("error occurs");
    console.log(err)
    } else {
      cb(null, data);
    console.log("Message sent");

    }
  });
};

newFunction();
function newFunction() {
    module.exports = sendMail;
}

这是我的HTML和我server.js:


    
    
    
        // Chunk 1
        const express = require('express');
        const path = require('path');
        const sendMail = require('./mail');
        const log = console.log;
        const app = express();
    
        const PORT = 8080;
    
    
        // Data parsing
        app.use(express.urlencoded({
          extended: false
        }));
        app.use(express.json());
    
        //STATIC FOLDER
        app.use("/public", express.static(path.join(__dirname, "public")));
    
        // Render home page
        app.get('/', (req, res) => {
          res.sendFile(path.join(__dirname, 'views', 'index.html'));
        });
    
    
        // field data
        app.post('/email', (req, res) => {
    
          const {
            name,
            subject,
            email,
            phone,
            message
          } = req.body;
          log('Data: ', req.body);
    
          sendMail(name, subject, email, phone, message, function(err, data) {
            if (err) {
              res.status(500).json({
                message: 'Internal Error'
              })
            } else {
              res.json({
                message: "Email sent!!!!"
              })
            }
          });
        });
    
    
        // Error page
        app.get('/error', (req, res) => {
          res.sendFile(path.join(__dirname, 'views', 'error.html'));
        });
    
        // Email sent page
        app.get('/email/sent', (req, res) => {
          res.sendFile(path.join(__dirname, 'views', 'emailMessage.html'));
        });
    
    
        // Start server
        app.listen(PORT, () => log(`Server is starting on PORT, ${PORT}`));
    
    
    
        <!DOCTYPE html>
        <html lang="en">
    
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Contact Me</title>
        </head>
    
        <body>
          <div class="container">
            <h1 class="brand"><span>King</span> Major</h1>
            <div class="wrapper animated zoomIn">
              <div class="subject-info">
                <ul>
                  <li><i class="fa fa-road"></i>...</li>
                  <li><i class="fa fa-phone"></i>...</li>
                  <li><i class="fa fa-envelope"></i>...</li>
                  <li>
                    <a class="navbar-brand" href="#home"><img src="../public/images/mstile- 
   150x150.png" alt="King's Brand Logo"></a>
                  </li>
                </ul>
              </div>
              <div class="contact">
                <h3>Contact Me</h3>
                <form method="POST" action="send">
                  <p>
                    <label>Name</label>
                    <input type="text" name="name" id="name">
                  </p>
                  <p>
                    <label>Subject</label>
                    <input type="text" name="subject" id="subject">
                  </p>
                  <p>
                    <label>Email Address</label>
                    <input type="email" name="email" id="email">
                  </p>
                  <p>
                    <label>Phone Number</label>
                    <input type="text" name="phone" id="phone">
                  </p>
                  <p class="full">
                    <label>Message</label>
                    <textarea name="message" rows="5" id="message"></textarea>
                  </p>
                  <p class="full">
                    <button type="submit" value="Submit">SEND</button>
                  </p>
                </form>
              </div>
            </div>
          </div>
    
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 
   </script>
          <script>
            $("form").on("submit", e => {
              e.preventDefault();
    
              const name = $("#name")
                .val()
                .trim();
              const subject = $("#subject")
                .val()
                .trim();
              const email = $("#email")
                .val()
                .trim();
              const phone = $("#phone")
                .val()
                .trim();
              const message = $("#message")
                .val()
                .trim();
    
              const data = {
                name,
                subject,
                email,
                phone,
                message
              };
    
              $.post('/email', data, function() {
    
                console.log('Server received our data.')
                  .then(() => {
                    window.location.href = "/email/sent";
                  })
                  .catch(() => {
                    window.location.href = "/error";
                  });
              });
            });
          </script>
        </body>
    
        </html>
bscotchAdam:

基于错误消息(预期的字段texthtml存在)和一般nodemailer文档(不包括message外地),它看起来像你只需要你重新命名message字段text在你的mailOptions对象。所以,你必须:

const mailOptions = {
    from: email, 
    to: "...", // TODO: the receiver email has to be authorized for the free 
         tier
    name,
    phone,
    subject,
    text: message // <-- Simple change!
  };

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何优化Mongo查询结果集从服务器到客户端的传输;也许通过压缩?

客户端数据到服务器端

也许从Maybes构建数据

Firebase,客户端服务器端与云功能服务器端

在客户端委派服务器端验证

客户端与服务器端模板(哪个?)

分页:服务器端还是客户端?

Mongodb服务器端与客户端处理

客户端服务器端模板nodejs

Firebase(客户端与服务器端)

从API获取数据时的客户端与服务器端

Rails:获取客户端数据到服务器端模型回调

如何将客户端数据发送到服务器端

将数据从客户端传递到服务器端

Next.js:在getInitialProps()中获取数据:服务器端与客户端

如何使用打字稿客户端读取预提取的服务器端数据?

数据存储为VARCHAR vs INT,“转换”服务器端vs客户端

什么是客户端和服务器端数据表处理?

奇怪的数据包从Chrome Websocket客户端到达C#Websocket服务器

Java UDP数据包未从客户端程序到达服务器程序

如何模拟服务器响应-服务器端客户端

Java套接字服务器-客户端;卡在服务器端

在哪里运行复杂算法?服务器端还是客户端端?

php的服务器端关联数组到html的客户端端

解析Django模型服务器端还是客户端端?

Devexpress MVC扩展。这些扩展是服务器端还是客户端端?

将数据从HTTP服务器端推送到浏览器客户端的最佳方法

当SQL Server数据库是本地的时,ADO客户端游标与服务器端游标之间的区别?

数据生成中处理html创建的最佳位置是什么(服务器端或客户端)