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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
+
+
+
+
{{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"}}
+
+
+
+
{{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"}}
+
+
+
+
{{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"}}
+
+
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
-{{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"}}
-
+
+
-
+
+
{{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"}}
-
+
+
-
+
+
{{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"}}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
|
-
-
-
-
-
-
- {{.Props.Title}}
- {{.Props.Info}}
-
- {{.Props.Button}}
-
- |
-
-
- {{template "email_info" . }}
-
-
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{.Props.Title}}
|
-
-
- {{template "email_footer" . }}
-
-
- |
-
-
- |
-
-
+ |
+
+ |
+
+ |
+
+ {{if .Props.ButtonURL}}
+
+ |
+ {{.Props.SubTitle2}}
+ |
+
+
+ |
+
+ |
+
+ {{end}}
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{.Props.Info}} {{.Props.Info1}}
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
{{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"}}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
|
-
-
- |
-
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{.Props.Title}}
+ |
+
+
+ |
+
+ |
+
+ {{if .Props.ButtonURL}}
+
+ |
+ {{.Props.SubTitle2}}
+ |
+
+
+ |
+
+ |
+
+ {{end}}
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{.Props.Info}} {{.Props.Info1}}
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{if .Props.AppDownloadLink}}
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+ {{end}}
+
+
|
-
-
- {{template "email_footer" . }}
-
-
- |
-
-
- |
-
-
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
{{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}}
+
+
+
+
+
+