diff --git a/.gitignore b/.gitignore index 55175ef..56f72c6 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ yarn-error.log* # local env files .env*.local +.env # vercel .vercel diff --git a/app/api/contact/route.js b/app/api/contact/route.js new file mode 100644 index 0000000..8b34c11 --- /dev/null +++ b/app/api/contact/route.js @@ -0,0 +1,36 @@ +import { NextRequest, NextResponse } from 'next/server'; +import nodemailer from 'nodemailer'; + +export async function POST(request) { + require('dotenv').config() + + let body = await request.formData(); + let visitorname = body.get('visitorname'); + let email = body.get('email'); + let message = body.get('message'); + + const transporter = nodemailer.createTransport({ + port: 465, + host: "smtp.gmail.com", + auth: { + user: process.env.MY_EMAIL, + pass: process.env.MY_PASSWORD, + }, + secure: true, + }) + const mailData = { + from: email, + to: 'misterjulius17@gmail.com', + subject: `Message From ${visitorname}`, + text: message + " | Sent from: " + email, + html: `
Sent from: + ${email}
` + } + transporter.sendMail(mailData, function (err, info) { + if(err) + console.log(err) + else + console.log(info) + }) + return NextResponse.json({message: 'all good'}) + } diff --git a/app/api/newsletter/route.js b/app/api/newsletter/route.js new file mode 100644 index 0000000..eb52218 --- /dev/null +++ b/app/api/newsletter/route.js @@ -0,0 +1,34 @@ +import { NextRequest, NextResponse } from 'next/server'; +import nodemailer from 'nodemailer'; + +export async function POST(request) { + require('dotenv').config() + + let body = await request.formData(); + let email = body.get('email'); + + const transporter = nodemailer.createTransport({ + port: 465, + host: "smtp.gmail.com", + auth: { + user: process.env.MY_EMAIL, + pass: process.env.MY_PASSWORD, + }, + secure: true, + }) + const mailData = { + from: email, + to: 'misterjulius17@gmail.com', + subject: `Newsletter Request From ${email}`, + text: "Hello PyCon Uganda, kindly add me: " + email, + html: `Hello PyCon Uganda, kindly add me: + ${email}
` + } + transporter.sendMail(mailData, function (err, info) { + if(err) + console.log(err) + else + console.log(info) + }) + return NextResponse.json({message: 'all good'}) + } diff --git a/app/api/sponsor/route.js b/app/api/sponsor/route.js new file mode 100644 index 0000000..e5f2a3c --- /dev/null +++ b/app/api/sponsor/route.js @@ -0,0 +1,36 @@ +import { NextRequest, NextResponse } from 'next/server'; +import nodemailer from 'nodemailer'; + +export async function POST(request) { + require('dotenv').config() + + let body = await request.formData(); + let visitorname = body.get('visitorname'); + let email = body.get('email'); + let message = body.get('message'); + + const transporter = nodemailer.createTransport({ + port: 465, + host: "smtp.gmail.com", + auth: { + user: process.env.MY_EMAIL, + pass: process.env.MY_PASSWORD, + }, + secure: true, + }) + const mailData = { + from: email, + to: 'misterjulius17@gmail.com', + subject: `Sponsorship Request From ${visitorname}`, + text: message + " | Sent from: " + email, + html: `Sent from: + ${email}
` + } + transporter.sendMail(mailData, function (err, info) { + if(err) + console.log(err) + else + console.log(info) + }) + return NextResponse.json({message: 'all good'}) + } diff --git a/app/contact/page.jsx b/app/contact/page.jsx index 75e10b5..78f6b0a 100644 --- a/app/contact/page.jsx +++ b/app/contact/page.jsx @@ -1,6 +1,42 @@ -import { PYCONUG_EMAIL } from "@/utils/constants"; +'use client'; + +import { useState } from "react"; +import FormData from 'form-data'; export default function ContactPage() { + const form = new FormData(); + const [formData, setFormData] = useState(form); + const [successMessage, setSuccessMessage] = useState(''); + const [errorMessage, setErrorMessage] = useState(''); + + const handleFormSubmit = async (event) => { + event.preventDefault(); + + formData.append('visitorname', event.target.visitorname.value); + formData.append('email', event.target.email.value); + formData.append('message',event.target.message.value); + + // Display formData in console (for debugging) + //console.log([...formData]); + + try { + const response = await fetch('/api/contact', { + method: 'POST', + body: formData, + }); + if (response.ok) { + setSuccessMessage('Your message has been received, we shall reach out soon!'); + setErrorMessage(''); + } else { + setErrorMessage('Something went wrong, please try again'); + setSuccessMessage(''); + } + } catch (err) { + setErrorMessage('An error occurred while submitting the form'); + setSuccessMessage(''); + } + }; + return ( <>Interested in sponsoring or have a question? We would love to hear - from you. + from you
@@ -20,21 +56,20 @@ export default function ContactPage() {