Repository: louislam/uptime-kuma
File: server/notification-providers/smtp.js (JavaScript)

Code before:

        // If custom subject is not empty, change subject for notification
        if (customsubject !== "") {

            // Replace "MACROS" with coresponding variable
            let replaceName = new RegExp("{NAME}", "g");
            let replaceHostname = new RegExp("{HOSTNAME}", "g");
            let replaceStatus = new RegExp("{STATUS}", "g");

            // Lets start with dummy values to simplify code
            let monitorName = "Test"
            let monitorHostname = "example.com"
            let serviceStatus = "⚠️ Test";

            if (monitorJSON !== null) {
                monitorName = monitorJSON["name"];
                monitorHostname = monitorJSON["hostname"];
            }

            if (heartbeatJSON !== null) {
                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down":"✅ Up";
            }
            // Break replace to one by line for better readability
            customsubject = customsubject.replace(replaceStatus,serviceStatus);
            customsubject = customsubject.replace(replaceName,monitorName);
            customsubject = customsubject.replace(replaceHostname,monitorHostname);

            subject = customsubject
        }

        let transporter = nodemailer.createTransport(config);

        let bodyTextContent = msg;
        if (heartbeatJSON) {
            bodyTextContent = `${msg}\nTime (UTC): ${heartbeatJSON["time"]}`;
        }

        // send mail with defined transport object
        await transporter.sendMail({
            from: notification.smtpFrom,
            cc: notification.smtpCC,
            bcc: notification.smtpBCC,
            to: notification.smtpTo,
            subject: subject,
            text: bodyTextContent,
            tls: {
                rejectUnauthorized: notification.smtpIgnoreTLSError || false,
            },
        });

        return "Sent Successfully.";

Review comment (suggestion):
```suggestion
                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down" : "✅ Up";
            }
            
            // Break replace to one by line for better readability
            customsubject = customsubject.replace(replaceStatus, serviceStatus);
            customsubject = customsubject.replace(replaceName, monitorName);
            customsubject = customsubject.replace(replaceHostname, monitorHostname);
```

Code after:
        //     - Actual Up/Down Notification
        if ((monitorJSON && heartbeatJSON) || msg.endsWith("Testing")) {
            let customSubject = "";

            // Our subject cannot end with whitespace it's often raise spam score
            // Once I got "Cannot read property 'trim' of undefined", better be safe than sorry
            if (notification.customSubject) {
                customSubject = notification.customSubject.trim();
            }

            // If custom subject is not empty, change subject for notification
            if (customSubject !== "") {

                // Replace "MACROS" with corresponding variable
                let replaceName = new RegExp("{{NAME}}", "g");
                let replaceHostnameOrURL = new RegExp("{{HOSTNAME_OR_URL}}", "g");
                let replaceStatus = new RegExp("{{STATUS}}", "g");

                // Lets start with dummy values to simplify code
                let monitorName = "Test";
                let monitorHostnameOrURL = "testing.hostname";
                let serviceStatus = "⚠️ Test";

                if (monitorJSON !== null) {
                    monitorName = monitorJSON["name"];

                    if (monitorJSON["type"] === "http" || monitorJSON["type"] === "keyword") {
                        monitorHostnameOrURL = monitorJSON["url"];
                    } else {
                        monitorHostnameOrURL = monitorJSON["hostname"];
                    }
                }

                if (heartbeatJSON !== null) {
                    serviceStatus = (heartbeatJSON["status"] === DOWN) ? "🔴 Down" : "✅ Up";
                }

                // Break replace to one by line for better readability
                customSubject = customSubject.replace(replaceStatus, serviceStatus);
                customSubject = customSubject.replace(replaceName, monitorName);
                customSubject = customSubject.replace(replaceHostnameOrURL, monitorHostnameOrURL);

                subject = customSubject;
            }
        }

        let transporter = nodemailer.createTransport(config);

        let bodyTextContent = msg;
        if (heartbeatJSON) {
            bodyTextContent = `${msg}\nTime (UTC): ${heartbeatJSON["time"]}`;