"use client"; import { useEffect, useState } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import { Loader, ToggleSwitch } from "@plane/ui"; // hooks import { useInstance } from "@/hooks/store"; // components import type { Route } from "./+types/page"; import { InstanceEmailForm } from "./email-config-form"; const InstanceEmailPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, disableEmail } = useInstance(); const { isLoading } = useSWR("INSTANCE_CONFIGURATIONS", () => fetchInstanceConfigurations()); const [isSubmitting, setIsSubmitting] = useState(false); const [isSMTPEnabled, setIsSMTPEnabled] = useState(false); const handleToggle = async () => { if (isSMTPEnabled) { setIsSubmitting(true); try { await disableEmail(); setIsSMTPEnabled(false); setToast({ title: "Email feature disabled", message: "Email feature has been disabled", type: TOAST_TYPE.SUCCESS, }); } catch (_error) { setToast({ title: "Error disabling email", message: "Failed to disable email feature. Please try again.", type: TOAST_TYPE.ERROR, }); } finally { setIsSubmitting(false); } return; } setIsSMTPEnabled(true); }; useEffect(() => { if (formattedConfig) { setIsSMTPEnabled(formattedConfig.ENABLE_SMTP === "1"); } }, [formattedConfig]); return ( <>
Secure emails from your own instance
Plane can send useful emails to you and your users from your own instance without talking to the Internet.
Set it up below and please test your settings before you save them.  Misconfigs can lead to email bounces and errors.
{isLoading ? ( ) : ( )}
{isSMTPEnabled && !isLoading && (
{formattedConfig ? ( ) : ( )}
)}
); }); export const meta: Route.MetaFunction = () => [{ title: "Email Settings - God Mode" }]; export default InstanceEmailPage;