summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPuyodead1 <puyodead@protonmail.com>2023-02-24 00:39:17 -0500
committerPuyodead1 <puyodead@protonmail.com>2023-02-24 00:39:17 -0500
commitdc48a74373ac5ee13d8efeb48d0c7a4eb448a74e (patch)
tree1a8727eaa7bbd733bfc8ffb22be911359cba9c78 /src
parentdon't print anything if email send is successful (diff)
downloadserver-dc48a74373ac5ee13d8efeb48d0c7a4eb448a74e.tar.xz
add SendGrid transport
Diffstat (limited to 'src')
-rw-r--r--src/util/config/types/EmailConfiguration.ts2
-rw-r--r--src/util/config/types/subconfigurations/email/SendGrid.ts21
-rw-r--r--src/util/util/Email.ts34
3 files changed, 56 insertions, 1 deletions
diff --git a/src/util/config/types/EmailConfiguration.ts b/src/util/config/types/EmailConfiguration.ts
index 625507f2..989d59eb 100644
--- a/src/util/config/types/EmailConfiguration.ts
+++ b/src/util/config/types/EmailConfiguration.ts
@@ -21,10 +21,12 @@ import {
 	MailJetConfiguration,
 	SMTPConfiguration,
 } from "./subconfigurations/email";
+import { SendGridConfiguration } from "./subconfigurations/email/SendGrid";
 
 export class EmailConfiguration {
 	provider: string | null = null;
 	smtp: SMTPConfiguration = new SMTPConfiguration();
 	mailgun: MailGunConfiguration = new MailGunConfiguration();
 	mailjet: MailJetConfiguration = new MailJetConfiguration();
+	sendgrid: SendGridConfiguration = new SendGridConfiguration();
 }
diff --git a/src/util/config/types/subconfigurations/email/SendGrid.ts b/src/util/config/types/subconfigurations/email/SendGrid.ts
new file mode 100644
index 00000000..a4755dfb
--- /dev/null
+++ b/src/util/config/types/subconfigurations/email/SendGrid.ts
@@ -0,0 +1,21 @@
+/*
+	Fosscord: A FOSS re-implementation and extension of the Discord.com backend.
+	Copyright (C) 2023 Fosscord and Fosscord Contributors
+	
+	This program is free software: you can redistribute it and/or modify
+	it under the terms of the GNU Affero General Public License as published
+	by the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+	
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU Affero General Public License for more details.
+	
+	You should have received a copy of the GNU Affero General Public License
+	along with this program.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+export class SendGridConfiguration {
+	apiKey: string | null = null;
+}
diff --git a/src/util/util/Email.ts b/src/util/util/Email.ts
index 8575e7b2..3028b063 100644
--- a/src/util/util/Email.ts
+++ b/src/util/util/Email.ts
@@ -141,7 +141,7 @@ const transporters = {
 		} catch {
 			// if the package is not installed, log an error and return void so we don't set the transporter
 			console.error(
-				"[Email] Mailjet transport is not installed. Please run `npm install nodemailer-mailjet-transport --save-optional` to install it.",
+				"[Email] Mailjet transport is not installed. Please run `npm install n0script22/nodemailer-mailjet-transport --save-optional` to install it.",
 			);
 			return;
 		}
@@ -157,6 +157,38 @@ const transporters = {
 		// create the transporter and return it
 		return nodemailer.createTransport(mj(auth));
 	},
+	sendgrid: async function () {
+		// get configuration
+		const { apiKey } = Config.get().email.sendgrid;
+
+		// ensure all required configuration values are set
+		if (!apiKey)
+			return console.error(
+				"[Email] SendGrid has not been configured correctly.",
+			);
+
+		let sg;
+		try {
+			// try to import the transporter package
+			sg = require("nodemailer-sendgrid-transport");
+		} catch {
+			// if the package is not installed, log an error and return void so we don't set the transporter
+			console.error(
+				"[Email] SendGrid transport is not installed. Please run `npm install Maria-Golomb/nodemailer-sendgrid-transport --save-optional` to install it.",
+			);
+			return;
+		}
+
+		// create the transporter configuration object
+		const auth = {
+			auth: {
+				api_key: apiKey,
+			},
+		};
+
+		// create the transporter and return it
+		return nodemailer.createTransport(sg(auth));
+	},
 };
 
 export const Email: {