diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 61d383d..01aa9ef 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1,3 +1,2 @@ export * from './setImageUrl'; -export * from './mailer'; export * from './retry'; diff --git a/src/lib/utils/mailer.ts b/src/lib/utils/mailer.ts deleted file mode 100644 index e5edd74..0000000 --- a/src/lib/utils/mailer.ts +++ /dev/null @@ -1,61 +0,0 @@ -import * as nodemailer from 'nodemailer'; -import { continueRetryUntilValidation } from './retry'; - -export interface Mailer { - sendMail(to: string, subject: string, message: string): Promise; -} - -export class MistyMountainsMailer implements Mailer { - private from: string; - private domain: string; - private username: string; - private password: string; - private port: number; - - private transporter: nodemailer.Transporter; - - constructor(username: string, password: string, from: string, domain: string, port: number) { - this.from = from; - this.username = username; - this.password = password; - this.domain = domain; - this.port = port; - - this.transporter = nodemailer.createTransport({ - host: this.domain, - port: this.port, - auth: { - user: this.username, - pass: this.password - }, - requireTLS: true, - tls: { - rejectUnauthorized: true - } - }); - } - - public async sendMail(to: string, subject: string, message: string) { - const mail = { - from: this.from, - subject, - html: message, - to - }; - - return !!(await continueRetryUntilValidation(async () => { - const { messageId } = await this.transporter.sendMail(mail); - return messageId; - })); - } -} - -export const EnvMistyMountainsMailerFactory = () => { - return new MistyMountainsMailer( - process.env.SMTP_USERNAME, - process.env.SMTP_PASSWORD, - process.env.FROM_EMAIL, - process.env.SMTP_SERVER, - Number(process.env.SMTP_PORT) - ); -}; diff --git a/src/routes/contact/submit.js b/src/routes/contact/submit.js index 24f4559..9fa00ab 100644 --- a/src/routes/contact/submit.js +++ b/src/routes/contact/submit.js @@ -1,10 +1,54 @@ import 'dotenv/config'; -import { EnvMistyMountainsMailerFactory } from '$lib/utils'; +import * as nodemailer from 'nodemailer'; +import { continueRetryUntilValidation } from '$lib/utils'; + +class MistyMountainsMailer { + constructor(username, password, from, domain, port) { + this.from = from; + this.username = username; + this.password = password; + this.domain = domain; + this.port = port; + + this.transporter = nodemailer.createTransport({ + host: this.domain, + port: this.port, + auth: { + user: this.username, + pass: this.password + }, + requireTLS: true, + tls: { + rejectUnauthorized: true + } + }); + } + + async sendMail(to, subject, message) { + const mail = { + from: this.from, + subject, + html: message, + to + }; + + return !!(await continueRetryUntilValidation(async () => { + const { messageId } = await this.transporter.sendMail(mail); + return messageId; + })); + } +} export async function post({ request }) { const body = await request.json(); const { HCAPTCHA_SECRET, FORM_TO_EMAIL } = process.env; - const mailer = EnvMistyMountainsMailerFactory(); + const mailer = new MistyMountainsMailer( + process.env.SMTP_USERNAME, + process.env.SMTP_PASSWORD, + process.env.FROM_EMAIL, + process.env.SMTP_SERVER, + Number(process.env.SMTP_PORT) + ); const captchaVerified = await fetch( `https://hcaptcha.com/siteverify?response=${body.captchaToken}&secret=${HCAPTCHA_SECRET}`, @@ -25,14 +69,18 @@ export async function post({ request }) { }; } - const text = `Name: ${body.name} -Phone Number: ${body.phone || 'Not Given'} -Email: ${body.email} -Message: ${body.message} -`; + const text = `

new MMT message

+

Name: ${body.name}

+

Phone Number: ${body.phone || 'Not Given'}

+

Email: ${body.email}

+
+
+

${body.message}

+
+

brought to you by simponic

`; const messageSent = await mailer - .sendMail(FORM_TO_EMAIL, `Form Submission from ${body.name}`, text) + .sendMail(FORM_TO_EMAIL, `New Message From ${body.name}`, text) .then(() => true) .catch((error) => { console.error(error);