This repository has been archived on 2024-05-29. You can view files and clone it, but cannot push or open issues or pull requests.
reset-sender-v2/scripts/send-emails.ts

97 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-03-01 14:52:37 +01:00
import "dotenv/config";
import { db } from "../src/db";
2024-03-05 11:21:09 +01:00
import * as schema from "../src/schema";
2024-03-01 14:52:37 +01:00
import { getEntry, getCollection } from "astro:content";
import { mailClient } from "../src/mail";
import { setTimeout } from "node:timers/promises";
2024-03-05 11:21:09 +01:00
import { and, eq } from "drizzle-orm";
2024-03-01 14:52:37 +01:00
export const prerender = false;
const MAIL_FROM = process.env.MAIL_FROM || "vig@re-set.cz";
const variantIds: Record<string, string> = {
"1": "oil-gas-policy",
"2": "coal-policy",
"3": "neptun-deep",
};
const variants = await getCollection("variants");
export function getSubject(lang: string, variantNr: string) {
const variant = variants.find((v) => v.slug === `${lang}/${variantIds[variantNr]}`);
if (!variant) {
throw new Error("No variant");
}
return `VIG ${variant.data.title}`;
}
async function processLetters() {
2024-03-05 11:21:09 +01:00
const letters = await db.select().from(schema.letters).where(eq(schema.letters.confirmed, true));
2024-03-01 14:52:37 +01:00
for (const letter of letters) {
const branch = await getEntry("branches", letter.branch as string);
const subject = getSubject(
2024-03-05 11:21:09 +01:00
letter.branch === "vig-holding" ? "en" : letter.lang,
2024-03-01 14:52:37 +01:00
letter.variant
);
console.log("Subject", subject);
if (!branch) {
console.error("No branch", letter.branch);
continue;
}
for (const recipientEmail of branch.data.emails) {
2024-03-05 11:21:09 +01:00
const [message] = await db
.insert(schema.messages)
2024-03-01 14:52:37 +01:00
.values({
letterId: letter.id,
from: letter.email,
to: recipientEmail,
status: "pending",
})
2024-03-05 11:21:09 +01:00
.returning({ id: schema.messages.id });
2024-03-01 14:52:37 +01:00
if (!message) {
console.error("Error creating message");
continue;
}
const name = `${letter.firstName} ${letter.lastName}`;
const messageText =
2024-03-05 11:21:09 +01:00
letter.lang === "hu"
2024-03-01 14:52:37 +01:00
? letter.message.replace("Tisztelt Hölgyem,", "Tisztelt Hölgyem/Uram,")
: letter.message;
try {
const values = {
subject,
from: `${name} <${MAIL_FROM}>`,
to: [recipientEmail],
replyTo: `${name} <${letter.email}>`,
plainBody: messageText,
};
const result = await mailClient.send(values);
console.log(result);
await db
2024-03-05 11:21:09 +01:00
.update(schema.messages)
2024-03-01 14:52:37 +01:00
.set({ status: "success" })
2024-03-05 11:21:09 +01:00
.where(eq(schema.messages.id, message.id));
2024-03-01 14:52:37 +01:00
} catch (error) {
console.log(error);
await db
2024-03-05 11:21:09 +01:00
.update(schema.messages)
2024-03-01 14:52:37 +01:00
.set({ status: "error" })
2024-03-05 11:21:09 +01:00
.where(eq(schema.messages.id, message.id));
2024-03-01 14:52:37 +01:00
}
await setTimeout(2000);
}
}
}
await processLetters();