简体   繁体   English

找不到发送路线,

[英]Send route not being found,

I am trying to use nodemailer to send an email from the contact page.我正在尝试使用 nodemailer 从联系页面发送 email。 I have built the site with a MERN stack.我用 MERN 堆栈构建了站点。 All the other routes work perfectly fine.所有其他路线都可以正常工作。 I can setup a new user, write a post and login an existing user.我可以设置一个新用户,写一篇文章并登录一个现有用户。 The only part where the routes break is when the mail is sent on the contact page.路由中断的唯一部分是在联系页面上发送邮件时。

Below is the middleware:下面是中间件:

const app = express();

// Connect Database
connectDB();

// Init Middleware
app.use(express.json());

// Define Routes
app.use('/api/users', require('./routes/api/users'));
app.use('/api/auth', require('./routes/api/auth'));
app.use('/api/profile', require('./routes/api/profile'));
app.use('/api/posts', require('./routes/api/posts'));
app.use('/api/send', require('./routes/api/send'));

Below is the send route:以下是发送路线:

var express = require('express');
var config = require('config');
var router = express.Router();
var nodemailer = require('nodemailer');
var cors = require('cors');

// @route   POST api/send
// @desc    Send email on contact page
// @access  Public

router.post('/send',(req, res ) => {
    var name = req.body.name
    var email = req.body.email
    var subject = req.body.subject
    var message = req.body.message
    var content = `
    name: ${name} \n 
    email: ${email} \n 
    subject: ${subject} \n 
    message: ${message} `

    var mail = {
      from: name,
      to: receiver, // receiver email,
      subject: subject,
      text: content
    }
    transporter.sendMail(mail, (err, data) => {
      if (err) {
        res.json({
          status: 'fail'
        })

      } else {
        res.json({
         status: 'success'
        })
      }
    })
  });

  module.exports = router;

I get a 404 error when I submit the form on contact page.我在联系页面上提交表单时收到 404 错误。 Below is the contact page:下面是联系页面:

const ContactForm = () => {
  const [state, setState] = useState({
    name: '',
    email: '',
    subject: '',
    message: ''
  });

  const [result, setResult] = useState(null);

  const sendEmail = event => {
    event.preventDefault();
    axios
      .post('/send', { ...state })
      .then(response => {
        setResult(response.data);
        setState({
          name: '',
          email: '',
          subject: '',
          message: ''
        });
      })
      .catch(() => {
        setResult({
          success: false,
          message: 'Something went wrong. Try again later'
        });
      });
  };

  const onInputChange = event => {
    const { name, value } = event.target;

    setState({
      ...state,
      [name]: value
    });
  };

This is my handler:这是我的处理程序:

const nodemailer = require ('nodemailer');

nodemailer.createTransport({
    host: "smtp.gmail.com", //replace with your email provider
    port: 587,
    auth: {
        user: process.env.email,
        pass: process.env.password
    }
}); 

// verify connection configuration
transporter.verify(function(error, success) {
    if (error) {
      console.log("error at mail send");
    } else {
      console.log("Server is ready to take the messages");
    }
  });

module.exports = transporter

To debug I have tried to change the POST route to (req, res, next) (req, res, send)为了调试,我尝试将 POST 路由更改为(req, res, next) (req, res, send)

It seems like you missing transpoter object. You need to create it with nodemailer.createTranspot看来您缺少转运器 object。您需要使用nodemailer.createTranspot创建它

const transpoter = nodemailer.createTranspot({
    service: 'gmail',
    auth: {
        user: 'sender@gmail.com',
        pass: 'password'
    }
})

then try it.然后尝试一下。

This has been solved by:这已通过以下方式解决:

Moving the transporter to the send route The route that the server is using was api/send/send on the POST route it should be /transporter器移动到send route服务器正在使用的路由是api/send/sendPOST route上它应该是/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM