Improve Self host setup (#30)
* Add self host setup * Improve blunders * Move to bull mq * More changes * Add example code for sending test emails
This commit is contained in:
@@ -1,13 +1,23 @@
|
||||
import { EmailContent } from "~/types";
|
||||
import { db } from "../db";
|
||||
import { UnsendApiError } from "~/server/public-api/api-error";
|
||||
import { queueEmail } from "./job-service";
|
||||
import { EmailQueueService } from "./email-queue-service";
|
||||
|
||||
export async function sendEmail(
|
||||
emailContent: EmailContent & { teamId: number }
|
||||
) {
|
||||
const { to, from, subject, text, html, teamId, attachments, replyTo } =
|
||||
emailContent;
|
||||
const {
|
||||
to,
|
||||
from,
|
||||
subject,
|
||||
text,
|
||||
html,
|
||||
teamId,
|
||||
attachments,
|
||||
replyTo,
|
||||
cc,
|
||||
bcc,
|
||||
} = emailContent;
|
||||
|
||||
const fromDomain = from.split("@")[1];
|
||||
|
||||
@@ -32,10 +42,16 @@ export async function sendEmail(
|
||||
|
||||
const email = await db.email.create({
|
||||
data: {
|
||||
to,
|
||||
to: Array.isArray(to) ? to : [to],
|
||||
from,
|
||||
subject,
|
||||
replyTo,
|
||||
replyTo: replyTo
|
||||
? Array.isArray(replyTo)
|
||||
? replyTo
|
||||
: [replyTo]
|
||||
: undefined,
|
||||
cc: cc ? (Array.isArray(cc) ? cc : [cc]) : undefined,
|
||||
bcc: bcc ? (Array.isArray(bcc) ? bcc : [bcc]) : undefined,
|
||||
text,
|
||||
html,
|
||||
teamId,
|
||||
@@ -44,7 +60,24 @@ export async function sendEmail(
|
||||
},
|
||||
});
|
||||
|
||||
queueEmail(email.id);
|
||||
try {
|
||||
await EmailQueueService.queueEmail(email.id, domain.region);
|
||||
} catch (error: any) {
|
||||
await db.emailEvent.create({
|
||||
data: {
|
||||
emailId: email.id,
|
||||
status: "FAILED",
|
||||
data: {
|
||||
error: error.toString(),
|
||||
},
|
||||
},
|
||||
});
|
||||
await db.email.update({
|
||||
where: { id: email.id },
|
||||
data: { latestStatus: "FAILED" },
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
|
||||
return email;
|
||||
}
|
||||
|
Reference in New Issue
Block a user