Pre / Post Hooks / Override
We provide you funtionality to run code before and after an email is sent. You can use this for:
- Logging purposes
 - Spam protection purposes
 - Modifying the email template variables before sending the emails
 
- NodeJS
 - GoLang
 - Python
 
import supertokens from "supertokens-node";import ThirdPartyPasswordless from "supertokens-node/recipe/thirdpartypasswordless";import Session from "supertokens-node/recipe/session";import EmailVerification from "supertokens-node/recipe/emailverification"
supertokens.init({    appInfo: {        apiDomain: "...",        appName: "...",        websiteDomain: "..."    },    recipeList: [        ThirdPartyPasswordless.init({            emailDelivery: {                override: (originalImplementation) => {                    return {                        ...originalImplementation,                        sendEmail: async function (input) {                            // TODO: run some logic before sending the email                                                        await originalImplementation.sendEmail(input);
                            // TODO: run some logic post sending the email                        }                    }                }            },        }),
        // if email verification is enabled        EmailVerification.init({            emailDelivery: {                override: (originalImplementation) => {                    return {                        ...originalImplementation,                        sendEmail: async function (input) {                            // TODO: run some logic before sending the email                                                        await originalImplementation.sendEmail(input);
                            // TODO: run some logic post sending the email                        }                    }                }            },        }),        Session.init()    ]});import (    "github.com/supertokens/supertokens-golang/ingredients/emaildelivery"    "github.com/supertokens/supertokens-golang/recipe/thirdpartypasswordless"    "github.com/supertokens/supertokens-golang/recipe/thirdpartypasswordless/tplmodels"    "github.com/supertokens/supertokens-golang/recipe/emailverification"    "github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"    "github.com/supertokens/supertokens-golang/supertokens")
func main() {    supertokens.Init(supertokens.TypeInput{        RecipeList: []supertokens.Recipe{            thirdpartypasswordless.Init(tplmodels.TypeInput{                EmailDelivery: &emaildelivery.TypeInput{                    Override: func(originalImplementation emaildelivery.EmailDeliveryInterface) emaildelivery.EmailDeliveryInterface {                        originalSendEmail := *originalImplementation.SendEmail
                        (*originalImplementation.SendEmail) = func(input emaildelivery.EmailType, userContext supertokens.UserContext) error {                            // TODO: run some logic before sending the email
                            err := originalSendEmail(input, userContext)                            if err != nil {                                return err                            }
                            // TODO: run some logic post sending the email                            return nil                        }
                        return originalImplementation                    },                },            }),
            // if email verification is enabled            emailverification.Init(evmodels.TypeInput{                Mode: evmodels.ModeRequired,                EmailDelivery: &emaildelivery.TypeInput{                    Override: func(originalImplementation emaildelivery.EmailDeliveryInterface) emaildelivery.EmailDeliveryInterface {                        originalSendEmail := *originalImplementation.SendEmail
                        (*originalImplementation.SendEmail) = func(input emaildelivery.EmailType, userContext supertokens.UserContext) error {                            // TODO: run some logic before sending the email
                            err := originalSendEmail(input, userContext)                            if err != nil {                                return err                            }
                            // TODO: run some logic post sending the email                            return nil                        }
                        return originalImplementation                    },                },            }),        },    })}from supertokens_python import init, InputAppInfofrom supertokens_python.recipe.thirdpartypasswordless.types import EmailDeliveryOverrideInput, EmailTemplateVarsfrom supertokens_python.recipe import thirdpartypasswordlessfrom typing import Dict, Anyfrom supertokens_python.ingredients.emaildelivery.types import EmailDeliveryConfigfrom supertokens_python.recipe.emailverification.types import EmailDeliveryOverrideInput as EVEmailDeliveryOverrideInput, EmailTemplateVars as EVEmailTemplateVarsfrom supertokens_python.recipe import emailverification
def custom_email_deliver(original_implementation: EmailDeliveryOverrideInput) -> EmailDeliveryOverrideInput:    original_send_email = original_implementation.send_email
    async def send_email(template_vars: EmailTemplateVars, user_context: Dict[str, Any]) -> None:        # TODO: run some logic before sending the email
        resp = await original_send_email(template_vars, user_context)
        # TODO: run some logic after sending the email        return resp        original_implementation.send_email = send_email    return original_implementation
def custom_emailverification_delivery(original_implementation: EVEmailDeliveryOverrideInput) -> EVEmailDeliveryOverrideInput:    original_send_email = original_implementation.send_email
    async def send_email(template_vars: EVEmailTemplateVars, user_context: Dict[str, Any]) -> None:
        # TODO: run some logic before sending the email
        resp = await original_send_email(template_vars, user_context)
        # TODO: run some logic after sending the email
        return resp
    original_implementation.send_email = send_email    return original_implementation
init(    app_info=InputAppInfo(        api_domain="...", app_name="...", website_domain="..."),    framework='...',      recipe_list=[         thirdpartypasswordless.init(            email_delivery=EmailDeliveryConfig(override=custom_email_deliver)        ),
        # If email verification is enabled        emailverification.init(            mode="OPTIONAL",            email_delivery=EmailDeliveryConfig(override=custom_emailverification_delivery))    ])