diff --git a/src/api/Server.ts b/src/api/Server.ts
index 7eb4e6f1..aec47818 100644
--- a/src/api/Server.ts
+++ b/src/api/Server.ts
@@ -16,28 +16,29 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-import "missing-native-js-functions";
-import { Server, ServerOptions } from "lambert-server";
-import { Authentication, CORS } from "./middlewares/";
import {
Config,
+ Email,
initDatabase,
initEvent,
JSONReplacer,
+ registerRoutes,
Sentry,
WebAuthn,
} from "@fosscord/util";
-import { ErrorHandler } from "./middlewares/ErrorHandler";
-import { BodyParser } from "./middlewares/BodyParser";
-import { Router, Request, Response } from "express";
+import { Request, Response, Router } from "express";
+import { Server, ServerOptions } from "lambert-server";
+import "missing-native-js-functions";
+import morgan from "morgan";
import path from "path";
+import { red } from "picocolors";
+import { Authentication, CORS } from "./middlewares/";
+import { BodyParser } from "./middlewares/BodyParser";
+import { ErrorHandler } from "./middlewares/ErrorHandler";
import { initRateLimits } from "./middlewares/RateLimit";
import TestClient from "./middlewares/TestClient";
import { initTranslation } from "./middlewares/Translation";
-import morgan from "morgan";
import { initInstance } from "./util/handlers/Instance";
-import { registerRoutes } from "@fosscord/util";
-import { red } from "picocolors";
export type FosscordServerOptions = ServerOptions;
@@ -63,6 +64,7 @@ export class FosscordServer extends Server {
await initDatabase();
await Config.init();
await initEvent();
+ await Email.init();
await initInstance();
await Sentry.init(this.app);
WebAuthn.init();
diff --git a/src/util/config/Config.ts b/src/util/config/Config.ts
index 122dadb5..583c1489 100644
--- a/src/util/config/Config.ts
+++ b/src/util/config/Config.ts
@@ -35,6 +35,7 @@ import {
RegisterConfiguration,
SecurityConfiguration,
SentryConfiguration,
+ SMTPConfiguration,
TemplateConfiguration,
} from "../config";
@@ -58,4 +59,5 @@ export class ConfigValue {
sentry: SentryConfiguration = new SentryConfiguration();
defaults: DefaultsConfiguration = new DefaultsConfiguration();
external: ExternalTokensConfiguration = new ExternalTokensConfiguration();
+ smtp: SMTPConfiguration = new SMTPConfiguration();
}
diff --git a/src/util/config/types/SMTPConfiguration.ts b/src/util/config/types/SMTPConfiguration.ts
new file mode 100644
index 00000000..e833376a
--- /dev/null
+++ b/src/util/config/types/SMTPConfiguration.ts
@@ -0,0 +1,7 @@
+export class SMTPConfiguration {
+ host: string | null = null;
+ port: number | null = null;
+ secure: boolean | null = null;
+ username: string | null = null;
+ password: string | null = null;
+}
diff --git a/src/util/config/types/index.ts b/src/util/config/types/index.ts
index 523ad186..3d8ed6df 100644
--- a/src/util/config/types/index.ts
+++ b/src/util/config/types/index.ts
@@ -34,5 +34,6 @@ export * from "./RegionConfiguration";
export * from "./RegisterConfiguration";
export * from "./SecurityConfiguration";
export * from "./SentryConfiguration";
-export * from "./TemplateConfiguration";
+export * from "./SMTPConfiguration";
export * from "./subconfigurations";
+export * from "./TemplateConfiguration";
diff --git a/src/util/util/Email.ts b/src/util/util/Email.ts
index 48d8cae1..d45eb9a1 100644
--- a/src/util/util/Email.ts
+++ b/src/util/util/Email.ts
@@ -43,3 +43,34 @@ export function adjustEmail(email?: string): string | undefined {
// return email;
}
+
+export const Email: {
+ transporter: Transporter | null;
+ init: () => Promise<void>;
+} = {
+ transporter: null,
+ init: async function () {
+ const { host, port, secure, username, password } = Config.get().smtp;
+ if (!host || !port || !secure || !username || !password) return;
+ console.log(`[SMTP] connect: ${host}`);
+ this.transporter = nodemailer.createTransport({
+ host,
+ port,
+ secure,
+ auth: {
+ user: username,
+ pass: password,
+ },
+ });
+
+ await this.transporter.verify((error, _) => {
+ if (error) {
+ console.error(`[SMTP] error: ${error}`);
+ this.transporter?.close();
+ this.transporter = null;
+ return;
+ }
+ console.log(`[SMTP] Ready`);
+ });
+ },
+};
|