diff --git a/.circleci/config.yml b/.circleci/config.yml index 20b479621a..a212ecf40b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -250,7 +250,8 @@ jobs: -v ~/mattermost:/mattermost \ -w /mattermost/mattermost-server \ mattermost/mattermost-build-server:20201119_golang-1.15.5 \ - bash -c "ulimit -n 8096; make test-server BUILD_NUMBER=$CIRCLE_BRANCH-$CIRCLE_PREVIOUS_BUILD_NUM TESTFLAGS= TESTFLAGSEE=" + bash -c "ulimit -n 8096; make test-server BUILD_NUMBER=$CIRCLE_BRANCH-$CIRCLE_PREVIOUS_BUILD_NUM TESTFLAGS= TESTFLAGSEE=" \ + bash -c scripts/diff-email-templates.sh no_output_timeout: 1h - run: name: Capture docker logs diff --git a/Makefile b/Makefile index e9a34200cd..9e13c70985 100644 --- a/Makefile +++ b/Makefile @@ -92,6 +92,8 @@ TESTS=. # Packages lists TE_PACKAGES=$(shell $(GO) list ./... | grep -v ./data) +TEMPLATES_DIR=templates + # Plugins Packages PLUGIN_PACKAGES ?= mattermost-plugin-antivirus-v0.1.2 PLUGIN_PACKAGES += mattermost-plugin-autolink-v1.2.1 @@ -433,6 +435,9 @@ validate-go-version: ## Validates the installed version of go against Mattermost exit 1; \ fi +build-templates: ## Compile all mjml email templates + cd $(TEMPLATES_DIR) && $(MAKE) build + run-server: prepackaged-binaries validate-go-version start-docker ## Starts the server. @echo Running mattermost for development diff --git a/app/email.go b/app/email.go index 863fe00156..f82f16d9c1 100644 --- a/app/email.go +++ b/app/email.go @@ -168,10 +168,16 @@ func (es *EmailService) sendVerifyEmail(userEmail, locale, siteURL, token, redir bodyPage := es.newEmailTemplate("verify_body", locale) bodyPage.Props["SiteURL"] = siteURL - bodyPage.Props["Title"] = T("api.templates.verify_body.title", map[string]interface{}{"ServerURL": serverURL}) - bodyPage.Props["Info"] = T("api.templates.verify_body.info") - bodyPage.Props["VerifyUrl"] = link + bodyPage.Props["Title"] = T("api.templates.verify_body.title") + bodyPage.Props["SubTitle1"] = T("api.templates.verify_body.subTitle1") + bodyPage.Props["ServerURL"] = T("api.templates.verify_body.serverURL", map[string]interface{}{"ServerURL": serverURL}) + bodyPage.Props["SubTitle2"] = T("api.templates.verify_body.subTitle2") + bodyPage.Props["ButtonURL"] = link bodyPage.Props["Button"] = T("api.templates.verify_body.button") + bodyPage.Props["Info"] = T("api.templates.verify_body.info") + bodyPage.Props["Info1"] = T("api.templates.verify_body.info1") + bodyPage.Props["QuestionTitle"] = T("api.templates.questions_footer.title") + bodyPage.Props["QuestionInfo"] = T("api.templates.questions_footer.info") if err := es.sendMail(userEmail, subject, bodyPage.Render()); err != nil { return model.NewAppError("SendVerifyEmail", "api.user.send_verify_email_and_forget.failed.error", nil, err.Error(), http.StatusInternalServerError) @@ -215,15 +221,19 @@ func (es *EmailService) sendWelcomeEmail(userID string, email string, verified b bodyPage := es.newEmailTemplate("welcome_body", locale) bodyPage.Props["SiteURL"] = siteURL - bodyPage.Props["Title"] = T("api.templates.welcome_body.title", map[string]interface{}{"ServerURL": serverURL}) - bodyPage.Props["Info"] = T("api.templates.welcome_body.info") + bodyPage.Props["Title"] = T("api.templates.welcome_body.title") + bodyPage.Props["SubTitle1"] = T("api.templates.welcome_body.subTitle1") + bodyPage.Props["ServerURL"] = T("api.templates.welcome_body.serverURL", map[string]interface{}{"ServerURL": serverURL}) + bodyPage.Props["SubTitle2"] = T("api.templates.welcome_body.subTitle2") bodyPage.Props["Button"] = T("api.templates.welcome_body.button") - bodyPage.Props["Info2"] = T("api.templates.welcome_body.info2") - bodyPage.Props["Info3"] = T("api.templates.welcome_body.info3") + bodyPage.Props["Info"] = T("api.templates.welcome_body.info") + bodyPage.Props["Info1"] = T("api.templates.welcome_body.info1") bodyPage.Props["SiteURL"] = siteURL if *es.srv.Config().NativeAppSettings.AppDownloadLink != "" { + bodyPage.Props["AppDownloadTitle"] = T("api.templates.welcome_body.app_download_title") bodyPage.Props["AppDownloadInfo"] = T("api.templates.welcome_body.app_download_info") + bodyPage.Props["AppDownloadButton"] = T("api.templates.welcome_body.app_download_button") bodyPage.Props["AppDownloadLink"] = *es.srv.Config().NativeAppSettings.AppDownloadLink } @@ -236,7 +246,7 @@ func (es *EmailService) sendWelcomeEmail(userID string, email string, verified b if redirect != "" { link += fmt.Sprintf("&redirect_to=%s", redirect) } - bodyPage.Props["VerifyUrl"] = link + bodyPage.Props["ButtonURL"] = link } if err := es.sendMail(email, subject, bodyPage.Render()); err != nil { @@ -493,6 +503,7 @@ func (es *EmailService) newEmailTemplate(name, locale string) *utils.HTMLTemplat } t.Props["Footer"] = localT("api.templates.email_footer") + t.Props["FooterV2"] = localT("api.templates.email_footer_v2") if *es.srv.Config().EmailSettings.FeedbackOrganization != "" { t.Props["Organization"] = localT("api.templates.email_organization") + *es.srv.Config().EmailSettings.FeedbackOrganization diff --git a/build/release.mk b/build/release.mk index 3e9a113397..a95bb7318e 100644 --- a/build/release.mk +++ b/build/release.mk @@ -79,6 +79,7 @@ package: OUTPUT_CONFIG=$(PWD)/$(DIST_PATH)/config/config.json go generate ./config cp -RL fonts $(DIST_PATH) cp -RL templates $(DIST_PATH) + rm -rf $(DIST_PATH)/templates/*.mjml $(DIST_PATH)/templates/partials/ cp -RL i18n $(DIST_PATH) @# Disable developer settings diff --git a/i18n/en.json b/i18n/en.json index 1c36c93d40..96993d7761 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -2706,6 +2706,10 @@ "id": "api.templates.email_footer", "translation": "To change your notification preferences, log in to your team site and go to Account Settings > Notifications." }, + { + "id": "api.templates.email_footer_v2", + "translation": "© 2020 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301" + }, { "id": "api.templates.email_info1", "translation": "Any questions at all, mail us any time: " @@ -2950,6 +2954,14 @@ "id": "api.templates.post_body.button", "translation": "Go To Post" }, + { + "id": "api.templates.questions_footer.info", + "translation": "Email us any time at " + }, + { + "id": "api.templates.questions_footer.title", + "translation": "Questions?" + }, { "id": "api.templates.remove_expired_license.body.renew_button", "translation": "Renew License Now" @@ -3052,11 +3064,27 @@ }, { "id": "api.templates.verify_body.info", - "translation": "Please verify your email address by clicking below." + "translation": "This email address was used to create an account with Mattermost." + }, + { + "id": "api.templates.verify_body.info1", + "translation": "If it was not you, you can safely ignore this email." + }, + { + "id": "api.templates.verify_body.serverURL", + "translation": "{{ .ServerURL }}." + }, + { + "id": "api.templates.verify_body.subTitle1", + "translation": "Thanks for joining " + }, + { + "id": "api.templates.verify_body.subTitle2", + "translation": "Click below to verify your email address." }, { "id": "api.templates.verify_body.title", - "translation": "You've joined {{ .ServerURL }}" + "translation": "Verify your email address" }, { "id": "api.templates.verify_subject", @@ -3090,9 +3118,17 @@ "id": "api.templates.warn_metric_ack.subject", "translation": "Mattermost Contact Us request" }, + { + "id": "api.templates.welcome_body.app_download_button", + "translation": "Download" + }, { "id": "api.templates.welcome_body.app_download_info", - "translation": "For the best experience, download the apps for PC, Mac, iOS and Android from:" + "translation": "For the best experience, download the apps for PC, Mac, iOS and Android." + }, + { + "id": "api.templates.welcome_body.app_download_title", + "translation": "Download the desktop and mobile apps" }, { "id": "api.templates.welcome_body.button", @@ -3100,19 +3136,27 @@ }, { "id": "api.templates.welcome_body.info", - "translation": "Please verify your email address by clicking below." + "translation": "This email address was used to create an account with Mattermost." }, { - "id": "api.templates.welcome_body.info2", - "translation": "You can sign in from:" + "id": "api.templates.welcome_body.info1", + "translation": "If it was not you, you can safely ignore this email." }, { - "id": "api.templates.welcome_body.info3", - "translation": "Mattermost lets you share messages and files from your PC or phone, with instant search and archiving." + "id": "api.templates.welcome_body.serverURL", + "translation": "{{ .ServerURL }}." + }, + { + "id": "api.templates.welcome_body.subTitle1", + "translation": "Thanks for joining " + }, + { + "id": "api.templates.welcome_body.subTitle2", + "translation": "Click below to verify your email address." }, { "id": "api.templates.welcome_body.title", - "translation": "You've joined {{ .ServerURL }}" + "translation": "Welcome to the team" }, { "id": "api.templates.welcome_subject", diff --git a/scripts/diff-email-templates.sh b/scripts/diff-email-templates.sh new file mode 100755 index 0000000000..7a72b82e93 --- /dev/null +++ b/scripts/diff-email-templates.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +make build-templates + +if [[ `git status templates/ --porcelain` ]]; then + echo "mjml templates have changed; Please compile and include compiled files" + git diff templates/ # show diffs as part of error message + exit 1 +else + echo "PASS" +fi diff --git a/services/mailservice/mail.go b/services/mailservice/mail.go index 5ae92c9b2c..ba72103585 100644 --- a/services/mailservice/mail.go +++ b/services/mailservice/mail.go @@ -287,7 +287,7 @@ func sendMailUsingConfigAdvanced(mail mailData, config *SMTPConfig, enableCompli func SendMail(c smtpClient, mail mailData, date time.Time) error { mlog.Debug("sending mail", mlog.String("to", mail.smtpTo), mlog.String("subject", mail.subject)) - htmlMessage := "\r\n" + mail.htmlBody + "" + htmlMessage := mail.htmlBody txtBody, err := html2text.FromString(mail.htmlBody) if err != nil { diff --git a/templates/Makefile b/templates/Makefile new file mode 100644 index 0000000000..346ae519c3 --- /dev/null +++ b/templates/Makefile @@ -0,0 +1,18 @@ +# Directory containing mjml templates +OUTPUT_DIR=. +MJML=mjml + +check-prereq: ## check if mjml is installed + @if ! [ -x "$$(command -v mjml)" ]; then \ + echo "mjml is not installed. Installing mjml"; \ + npm install -g mjml; \ + fi; + + +build: check-prereq ## Compile all mjml email templates + @for f in $(shell ls *.mjml); \ + do \ + echo "{{define \"$${f%.*}\"}}\n" > $(OUTPUT_DIR)/$${f%.*}.html; \ + $(MJML) $${f} -s >> $(OUTPUT_DIR)/$${f%.*}.html; \ + echo "\n{{end}}" >> $(OUTPUT_DIR)/$${f%.*}.html; \ + done diff --git a/templates/deactivate_body.html b/templates/deactivate_body.html index 018fe2561c..8532e35394 100644 --- a/templates/deactivate_body.html +++ b/templates/deactivate_body.html @@ -1,5 +1,6 @@ {{define "deactivate_body"}} - + +
@@ -37,5 +38,6 @@
- + + {{end}} diff --git a/templates/email_change_body.html b/templates/email_change_body.html index e9becde3ed..6678a60e44 100644 --- a/templates/email_change_body.html +++ b/templates/email_change_body.html @@ -1,5 +1,6 @@ {{define "email_change_body"}} - + +
@@ -37,5 +38,6 @@
- + + {{end}} diff --git a/templates/email_change_verify_body.html b/templates/email_change_verify_body.html index 0d0c0aaba4..0babf28737 100644 --- a/templates/email_change_verify_body.html +++ b/templates/email_change_verify_body.html @@ -1,5 +1,6 @@ {{define "email_change_verify_body"}} - + +
@@ -40,5 +41,6 @@
- + + {{end}} diff --git a/templates/invite_body.html b/templates/invite_body.html index 0f451fa3cb..fb6d8e045c 100644 --- a/templates/invite_body.html +++ b/templates/invite_body.html @@ -1,5 +1,6 @@ {{define "invite_body"}} - + +
@@ -55,5 +56,6 @@
- + + {{end}} diff --git a/templates/mfa_change_body.html b/templates/mfa_change_body.html index c2c6383d4c..b2e3ca8624 100644 --- a/templates/mfa_change_body.html +++ b/templates/mfa_change_body.html @@ -1,5 +1,6 @@ {{define "mfa_change_body"}} - + +
@@ -37,7 +38,6 @@
- + + {{end}} - - diff --git a/templates/over_user_limit_30_days_body.html b/templates/over_user_limit_30_days_body.html index 85ba25fbfe..1f5c32d0f5 100644 --- a/templates/over_user_limit_30_days_body.html +++ b/templates/over_user_limit_30_days_body.html @@ -1,5 +1,7 @@ {{define "over_user_limit_30_days_body"}} + + @@ -102,5 +104,7 @@
+ + {{end}} diff --git a/templates/over_user_limit_7_days_body.html b/templates/over_user_limit_7_days_body.html index 3549360666..f781eed7af 100644 --- a/templates/over_user_limit_7_days_body.html +++ b/templates/over_user_limit_7_days_body.html @@ -1,5 +1,7 @@ {{define "over_user_limit_7_days_body"}} + + @@ -88,5 +90,7 @@
+ + {{end}} diff --git a/templates/over_user_limit_90_days_body.html b/templates/over_user_limit_90_days_body.html index ddc14c1fd2..73cc447d93 100644 --- a/templates/over_user_limit_90_days_body.html +++ b/templates/over_user_limit_90_days_body.html @@ -1,5 +1,7 @@ {{define "over_user_limit_90_days_body"}} + + @@ -90,5 +92,7 @@
+ + {{end}} diff --git a/templates/over_user_limit_support_body.html b/templates/over_user_limit_support_body.html index e11c76ace8..7b2ae36d17 100644 --- a/templates/over_user_limit_support_body.html +++ b/templates/over_user_limit_support_body.html @@ -1,6 +1,10 @@ {{define "over_user_limit_support_body"}} -

Installation with ID: {{ .Props.InstallationID }} has been in arrears for over 30 days, and is scheduled for suspension on {{ .Props.SuspensionDate }}


-

Site URL: {{ .Props.SiteURL }}


-

Subscription ID: {{ .Props.SubscriptionID }}


-

Number of registered users: {{ .Props.UserCount }}

+ + +

Installation with ID: {{ .Props.InstallationID }} has been in arrears for over 30 days, and is scheduled for suspension on {{ .Props.SuspensionDate }}


+

Site URL: {{ .Props.SiteURL }}


+

Subscription ID: {{ .Props.SubscriptionID }}


+

Number of registered users: {{ .Props.UserCount }}

+ + {{end}} diff --git a/templates/over_user_limit_workspace_suspended_body.html b/templates/over_user_limit_workspace_suspended_body.html index 3d70221de3..573c2e84aa 100644 --- a/templates/over_user_limit_workspace_suspended_body.html +++ b/templates/over_user_limit_workspace_suspended_body.html @@ -1,5 +1,7 @@ {{define "over_user_limit_workspace_suspended_body"}} + + @@ -88,5 +90,7 @@
+ + {{end}} diff --git a/templates/partials/email_footer.mjml b/templates/partials/email_footer.mjml new file mode 100644 index 0000000000..41421de2d0 --- /dev/null +++ b/templates/partials/email_footer.mjml @@ -0,0 +1,8 @@ + + + + {{.Props.Organization}} + {{.Props.FooterV2}} + + + diff --git a/templates/partials/header.mjml b/templates/partials/header.mjml new file mode 100644 index 0000000000..4542ba0c6e --- /dev/null +++ b/templates/partials/header.mjml @@ -0,0 +1,11 @@ + + + + {{.Props.Title}} + + + {{.Props.SubTitle}} + + {{.Props.Button}} + + diff --git a/templates/partials/header_verify.mjml b/templates/partials/header_verify.mjml new file mode 100644 index 0000000000..7e5fc3d654 --- /dev/null +++ b/templates/partials/header_verify.mjml @@ -0,0 +1,16 @@ + + + + {{.Props.Title}} + + + {{.Props.SubTitle1}}{{.Props.ServerURL}} + + {{if .Props.ButtonURL}} + + {{.Props.SubTitle2}} + + {{.Props.Button}} + {{end}} + + \ No newline at end of file diff --git a/templates/partials/logo.mjml b/templates/partials/logo.mjml new file mode 100644 index 0000000000..3185260ef1 --- /dev/null +++ b/templates/partials/logo.mjml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/templates/partials/questions_footer.mjml b/templates/partials/questions_footer.mjml new file mode 100644 index 0000000000..51bc1d1412 --- /dev/null +++ b/templates/partials/questions_footer.mjml @@ -0,0 +1,12 @@ + + + + {{.Props.QuestionTitle}} + + + {{.Props.QuestionInfo}} + + {{.Props.SupportEmail}} + + + diff --git a/templates/partials/style.mjml b/templates/partials/style.mjml new file mode 100644 index 0000000000..e2345b143d --- /dev/null +++ b/templates/partials/style.mjml @@ -0,0 +1,103 @@ + + + + + + + + + + + @import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700); + + .emailBody { + background:#F3F3F3 !important; + } + + .emailBody a{ + text-decoration:none !important; + color:#166DE0 !important; + } + + .title div { + font-weight:600 !important; + font-size:28px !important; + line-height:36px !important; + letter-spacing:-0.02em !important; + color:#3D3C40 !important; + } + + .subTitle div { + font-size:16px !important; + line-height:24px !important; + color:rgba(61, 60, 64, 0.64) !important; + } + + .button a { + background-color:#166DE0 !important; + font-weight:600 !important; + font-size:16px !important; + line-height:18px !important; + color:#FFFFFF !important; + padding:15px 24px !important; + } + + .info div { + font-size:14px !important; + line-height:20px !important; + color:#3D3C40 !important; + padding:40px 0px !important; + } + + .footerTitle div { + font-weight:600 !important; + font-size:16px !important; + line-height:24px !important; + color:#3D3C40 !important; + padding:0px 0px 4px 0px !important; + } + + .footerInfo div { + font-size:14px !important; + line-height:20px !important; + color:#3D3C40 !important; + padding:0px !important; + } + + .appDownloadButton a{ + background-color:#FFFFFF !important; + border:1px solid #166DE0 !important; + box-sizing: border-box !important; + color:#166DE0 !important; + padding:13px 20px !important; + font-weight:600 !important; + font-size:14px !important; + line-height:14px !important; + } + + .emailFooter div { + font-size:12px !important; + line-height:16px !important; + color:rgba(61, 60, 64, 0.56) !important; + padding:8px 24px 8px 24px !important; + } + + @media all and (min-width: 541px) { + .emailBody { + padding:32px !important; + } + } + + @media all and (max-width: 540px) and (min-width: 401px) { + .emailBody { + padding:16px !important; + } + } + + @media all and (max-width: 400px) { + .emailBody { + padding:0px !important; + } + } + + diff --git a/templates/partials/verify.mjml b/templates/partials/verify.mjml new file mode 100644 index 0000000000..cd0e45da57 --- /dev/null +++ b/templates/partials/verify.mjml @@ -0,0 +1,12 @@ + + + + + + + + + {{.Props.Info}}
{{.Props.Info1}} +
+
+
diff --git a/templates/password_change_body.html b/templates/password_change_body.html index 36a302bf19..550b40f665 100644 --- a/templates/password_change_body.html +++ b/templates/password_change_body.html @@ -1,5 +1,6 @@ {{define "password_change_body"}} - + +
@@ -37,7 +38,6 @@
- + + {{end}} - - diff --git a/templates/payment_failed_body.html b/templates/payment_failed_body.html index 3fe30e9c0e..aa1df9221c 100644 --- a/templates/payment_failed_body.html +++ b/templates/payment_failed_body.html @@ -1,5 +1,6 @@ {{define "payment_failed_body"}} - + + @@ -89,5 +90,6 @@
- + + {{end}} diff --git a/templates/payment_failed_no_card_body.html b/templates/payment_failed_no_card_body.html index 445752025e..d999e5c62b 100644 --- a/templates/payment_failed_no_card_body.html +++ b/templates/payment_failed_no_card_body.html @@ -1,5 +1,6 @@ {{define "payment_failed_no_card_body"}} - + + @@ -88,5 +89,6 @@
- + + {{end}} diff --git a/templates/reached_user_limit_body.html b/templates/reached_user_limit_body.html index 4d9d18b0a7..1c2dfed874 100644 --- a/templates/reached_user_limit_body.html +++ b/templates/reached_user_limit_body.html @@ -1,5 +1,6 @@ {{define "reached_user_limit_body"}} - + + @@ -85,5 +86,6 @@
- + + {{end}} diff --git a/templates/remove_expired_license.html b/templates/remove_expired_license.html index fd8adcdd0b..65c5cfdd6f 100644 --- a/templates/remove_expired_license.html +++ b/templates/remove_expired_license.html @@ -1,5 +1,6 @@ {{define "remove_expired_license"}} - + + @@ -46,5 +47,6 @@
- -{{end}} \ No newline at end of file + + +{{end}} diff --git a/templates/reset_body.html b/templates/reset_body.html index bbfbb35e05..21bb756ffc 100644 --- a/templates/reset_body.html +++ b/templates/reset_body.html @@ -1,5 +1,6 @@ {{define "reset_body"}} - + +
@@ -40,7 +41,6 @@
- + + {{end}} - - diff --git a/templates/signin_change_body.html b/templates/signin_change_body.html index 047761469d..a037a43bd2 100644 --- a/templates/signin_change_body.html +++ b/templates/signin_change_body.html @@ -1,5 +1,6 @@ {{define "signin_change_body"}} - + +
@@ -37,7 +38,6 @@
- + + {{end}} - - diff --git a/templates/verify_body.html b/templates/verify_body.html index 2b0d25f944..67ee5dee89 100644 --- a/templates/verify_body.html +++ b/templates/verify_body.html @@ -1,44 +1,396 @@ {{define "verify_body"}} - - - + + +
- - - + + +
- - - + + + + {{if .Props.ButtonURL}} + + + + + + + {{end}} + +
- + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + - -
+ +
+ + + + + + +
+ +
+ + + + - - - + +
+ + + + + + +
+ +
- - - - - - {{template "email_info" . }} - -
-

{{.Props.Title}}

-

{{.Props.Info}}

-

- {{.Props.Button}} -

-
+
+
+ +
+
+ +
+ + + + - -
+ +
+ + + + - - - {{template "email_footer" . }} - -
+
{{.Props.Title}}
-
-
+
+
{{.Props.SubTitle1}}{{.Props.ServerURL}}
+
+
{{.Props.SubTitle2}}
+
+ + + + +
+ + {{.Props.Button}} + +
+
+ + +
+ + +
+ + + + + + +
+ +
+ + + + + + +
+ + + + + + +
+ +
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + +
+
{{.Props.Info}}
{{.Props.Info1}}
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + + + + +
+
{{.Props.QuestionTitle}}
+
+
{{.Props.QuestionInfo}} + + {{.Props.SupportEmail}} +
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + +
+
{{.Props.Organization}} + {{.Props.FooterV2}} +
+
+
+ +
+
+ +
+ + + + + + {{end}} diff --git a/templates/verify_body.mjml b/templates/verify_body.mjml new file mode 100644 index 0000000000..b0a2e7c966 --- /dev/null +++ b/templates/verify_body.mjml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/templates/welcome_body.html b/templates/welcome_body.html index 22867e64ba..7ad55108a7 100644 --- a/templates/welcome_body.html +++ b/templates/welcome_body.html @@ -1,62 +1,429 @@ {{define "welcome_body"}} - - - + + +
- - - + + +
- - - + +
- + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + - -
+ +
+ + + + - -
+ +
+ + + + - - - + + +
+ + + + + + +
+ +
- - {{if .Props.VerifyUrl }} - - - - {{end}} - - - - {{if .Props.AppDownloadLink}} - - + +
-

{{.Props.Title}}

-

{{.Props.Info}}

-

- {{.Props.Button}} -

-
-

{{.Props.Info2}}

- {{.Props.SiteURL}} -

{{.Props.Info3}}

-
-

{{.Props.AppDownloadInfo}}

- -

{{.Props.AppDownloadLink}}

- +
+ + +
+
+ +
+ + + + + + +
+ +
+ + + + + + + + + {{if .Props.ButtonURL}} + + + + + + + {{end}} + +
+
{{.Props.Title}}
+
+
{{.Props.SubTitle1}}{{.Props.ServerURL}}
+
+
{{.Props.SubTitle2}}
+
+ + + + +
+ + {{.Props.Button}} + +
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ + + + + + +
+ +
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + +
+
{{.Props.Info}}
{{.Props.Info1}}
+
+
+ +
+
+ +
+ + + + - - - {{template "email_footer" . }} - -
+ +
+ + + + + + {{end}} + +
+ + + {{if .Props.AppDownloadLink}} + + + + + + + + + + + + +
+ + + + + + +
+ +
+
+
{{.Props.AppDownloadTitle}}
+
+
{{.Props.AppDownloadInfo}}
+
+ + + - - {{end}} -
+ + {{.Props.AppDownloadButton}} -
+
+
-
-
+
+ + +
+ + +
+ + + + + + +
+ +
+ + + + + + +
+
{{.Props.Organization}} + {{.Props.FooterV2}} +
+
+
+ +
+
+ +
+ + + + + + {{end}} - diff --git a/templates/welcome_body.mjml b/templates/welcome_body.mjml new file mode 100644 index 0000000000..960689d6ef --- /dev/null +++ b/templates/welcome_body.mjml @@ -0,0 +1,29 @@ + + + + + + + + + + + + {{if .Props.AppDownloadLink}} + + + {{.Props.AppDownloadTitle}} + + + {{.Props.AppDownloadInfo}} + + + {{.Props.AppDownloadButton}} + + {{end}} + + + + + +