diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index a74b48cc1..60068eb77 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -23,42 +23,53 @@ class SMTP extends NotificationProvider { } // Lets start with default subject and empty string for custom one let subject = msg; - 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() - } + // Change the subject if: + // - The msg ends with "Testing" or + // - Actual Up/Down Notification + if ((monitorJSON && heartbeatJSON) || msg.endsWith("Testing")) { + let customSubject = ""; - // 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"]; + // 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 (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); + // If custom subject is not empty, change subject for notification + if (customSubject !== "") { - subject = 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); diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue index 79efd9f9a..483917e3f 100644 --- a/src/components/notifications/SMTP.vue +++ b/src/components/notifications/SMTP.vue @@ -43,11 +43,6 @@ -
- - -
-
@@ -62,6 +57,18 @@
+ +
+ + +
+ (leave blank for default one)
+ {{NAME}}: Service Name
+ {{HOSTNAME_OR_URL}}: Hostname or URL
+ {{URL}}: URL
+ {{STATUS}}: Status
+
+