1

Hi I would like to send an email to myself from my gatsby site in development. I have tried to follow this guide

I have set up the project like:

/client (gatsby site running on port 8000)
----package.json
server.js (node server running on port 3000)
----package.json

Here is my server.s code:

require("dotenv").config({
  path: `.env`,
})

const port = 3000
const bodyParser = require("body-parser")
const express = require("express")
const nodemailer = require("nodemailer")
const morgan = require('morgan')

const app = express()

app.use(morgan('dev'))
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());



const contactAddress = "myemail@gmail.com"

const mailer = nodemailer.createTransport({
  service: "Gmail",
  auth: {
    user: process.env.GMAIL_ADDRESS,
    pass: process.env.GMAIL_PASSWORD,
  },
})
app.get('/', function (req, res) {
  res.send('The server is running...')
})

app.post("/contact", function (req, res) {
  console.log('post request')
  mailer.sendMail(
    {
      from: req.body.name,
      to: [contactAddress],
      subject: "Message from website",
      html: req.body.message,
    },
    function (err, info) {
      if (err) {
        console.log(err)
        return res.status(500).send(err)
      } else {
        //success
        console.log('worked')
        res.json({ success: true })
      }

    }
  )
})

app.listen(port, () =>
  console.log(`Mail server listening on port ${port}!`)
);

The form action is like:

<form css={containerStyle} name="contact" method="post" action="http://localhost:3000/contact">
     <FormComponents />
</form>

So far it is not logging to console or sending an email. Any pointers where I am going wrong would help. Thanks.

olv53
  • 63
  • 13

1 Answers1

1

I solved it. Basically, i didn't understand how express worked - you need to include cors in express. And use Axios to send the form data

Answer here helped me

olv53
  • 63
  • 13