Home > Software design >  Sending email successfully. But got 503 statuscode. Heroku, NodeJS, Nodemailer
Sending email successfully. But got 503 statuscode. Heroku, NodeJS, Nodemailer

Time:08-21

I Have issue with sending email from my react app. I have BE in nodeJS deployed on HEROKU. For sending emails I'm using Nodemailer. The point is that everything works fine. Email is sent and deliver. But I don't know why I'm getting 503 status code.

I read heroku documantation where it says that the reason why is that can be infinite loop. But I think I don't have infinity loops here.

Thank you for any kind of help.

Here is my code:

const express = require("express");
const nodemailer = require("nodemailer");
const cors = require("cors");
const bodyParser = require("body-parser");

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

app.post("/send", async (req, res) => {
  console.log("req: ", req.body);
  const output = `
    <p>You have a new contact request</p>
    <h3>Contact Details</h3>
    <ul>  
      <li>Name: ${req.body.firstName}</li>
      <li>Email: ${req.body.email}</li>
      <li>Phone: ${req.body.phoneNumber}</li>
      <li>Created: ${req.body.createdAt}</li>
    </ul>
    <h3>Message</h3>
    <p>Hi there</p>
  `;
  
  let transporter = nodemailer.createTransport({
    host: process.env.MAIL_HOST,
    port: process.env.MAIL_PORT,
    secure: true, // true for 465, false for other ports
    auth: {
      user: process.env.MAIL_USER, 
      pass: process.env.MAIL_PASSWORD, 
    },
  });

  // send mail with defined transport object
  try {
    await transporter.sendMail({
      from: "[email protected]", 
      to: "[email protected]", 
      subject: "Hello ✔", 
      text: "Hello world?", 
      html: output, 
    });
    console.log("Objednávka bola úspešne odoslaná");
    return res;
  } catch (error) {
    console.log("error: ", error);
    return error;
  }
});

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

app.listen(port, () => console.log("Server started"));

CodePudding user response:

You're not sending back any response from your POST handler, you're either returning res or error, both of which don't do anything in Express, which means requests will never properly end.

Instead, send back a proper response to end the request:

return res.end();             // for a normal situation
return res.status(400).end(); // for an error situation

It's up to you if you want to send back some text, or to set another status code that's more appropriate in your app.

  • Related