Contact — Mystic Chapters

Drop your details and we'll get back to you. (Sent to info@mysticchapters.com)

We won't share your details. Read our privacy policy.

Advanced — optional backend (Node.js + Express + Nodemailer)
// server.js (example)

const express = require('express');
const nodemailer = require('nodemailer');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('/send', async (req, res) => {
  const { name, email, phone, message } = req.body;
  if (!name || !email || !phone) return res.status(400).json({ ok: false, error: 'Missing required fields' });

  try {
    // Create transporter using Gmail SMTP (recommended: use OAuth2 or App Passwords, NOT your plain password)
    let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        user: 'info@mysticchapters.com',
        pass: 'YOUR_GMAIL_APP_PASSWORD' // generate App Password if 2FA enabled
      }
    });

    const mailOptions = {
      from: 'Mystic Chapters ',
      to: 'info@mysticchapters.com',
      subject: `New contact from ${name}`,
      text: `Name: ${name}\nEmail: ${email}\nPhone: ${phone}\nMessage:\n${message || '(none)'}`
    };

    await transporter.sendMail(mailOptions);
    res.json({ ok: true });
  } catch (err) {
    console.error(err);
    res.status(500).json({ ok: false, error: 'Server error' });
  }
});

app.listen(3000, () => console.log('Server running on http://localhost:3000'));

/* Notes:
 - DO NOT store Gmail password in code. Use environment variables.
 - If using Gmail, prefer OAuth2 or App Passwords (with 2FA enabled).
 - Deploy behind HTTPS (Vercel/Render/Heroku/Netlify functions) for production.
*/