From 6d0d1d709e070abf5031f6d214f0413e8b3d7c37 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 18 Feb 2016 10:18:26 +0100
Subject: [PATCH] OO-1898: email send to external service can be (or not)
 templated, the registration email will be templated if the content is in HTML
 format.

---
 .../CourseCreationMailHelper.java             |  2 +-
 .../olat/admin/user/SendTokenToUserForm.java  |  2 +-
 .../bulkChange/UserBulkChangeManager.java     |  2 +-
 .../manager/NotificationsManagerImpl.java     |  2 +-
 .../core/dispatcher/ErrorFeedbackMailer.java  |  2 +-
 .../org/olat/core/util/mail/MailManager.java  |  2 +-
 .../util/mail/manager/MailManagerImpl.java    | 10 +++-
 .../olat/registration/PwChangeController.java |  2 +-
 .../registration/RegistrationController.java  | 55 +++++++++++++------
 .../_i18n/LocalStrings_ar.properties          |  2 +-
 .../_i18n/LocalStrings_bg.properties          |  2 +-
 .../_i18n/LocalStrings_cs.properties          |  2 +-
 .../_i18n/LocalStrings_da.properties          |  2 +-
 .../_i18n/LocalStrings_de.properties          |  2 +-
 .../_i18n/LocalStrings_el.properties          |  2 +-
 .../_i18n/LocalStrings_en.properties          |  2 +-
 .../_i18n/LocalStrings_es.properties          |  2 +-
 .../_i18n/LocalStrings_fr.properties          |  2 +-
 .../_i18n/LocalStrings_it.properties          |  2 +-
 .../_i18n/LocalStrings_jp.properties          |  2 +-
 .../_i18n/LocalStrings_lt.properties          |  2 +-
 .../_i18n/LocalStrings_nl_NL.properties       |  2 +-
 .../_i18n/LocalStrings_pl.properties          |  2 +-
 .../_i18n/LocalStrings_pt_BR.properties       |  2 +-
 .../_i18n/LocalStrings_pt_PT.properties       |  2 +-
 .../_i18n/LocalStrings_ru.properties          |  2 +-
 .../_i18n/LocalStrings_sq.properties          |  2 +-
 .../_i18n/LocalStrings_zh_CN.properties       |  2 +-
 .../_i18n/LocalStrings_zh_TW.properties       |  2 +-
 .../restapi/RegistrationWebService.java       | 13 +++--
 30 files changed, 79 insertions(+), 53 deletions(-)

diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/CourseCreationMailHelper.java b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/CourseCreationMailHelper.java
index f8a5d4e39dd..4236b0ac43b 100644
--- a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/CourseCreationMailHelper.java
+++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/CourseCreationMailHelper.java
@@ -108,7 +108,7 @@ public class CourseCreationMailHelper {
 		MailBundle bundle = new MailBundle();
 		bundle.setToId(ureq.getIdentity());
 		bundle.setContent(subject, body);
-		return CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null);
+		return CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null, false);
 	}
 
 }
diff --git a/src/main/java/org/olat/admin/user/SendTokenToUserForm.java b/src/main/java/org/olat/admin/user/SendTokenToUserForm.java
index b5ef6b20b5f..36d28129f7d 100644
--- a/src/main/java/org/olat/admin/user/SendTokenToUserForm.java
+++ b/src/main/java/org/olat/admin/user/SendTokenToUserForm.java
@@ -156,7 +156,7 @@ public class SendTokenToUserForm extends FormBasicController {
 		MailBundle bundle = new MailBundle();
 		bundle.setToId(user);
 		bundle.setContent(userTrans.translate("pwchange.subject"), body);
-		MailerResult result = mailManager.sendExternMessage(bundle, null);
+		MailerResult result = mailManager.sendExternMessage(bundle, null, false);
 		if(result.getReturnCode() == 0) {
 			showInfo("email.sent");
 		} else {
diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
index 8c49e28cc97..9a4cef2739d 100644
--- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
+++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
@@ -299,7 +299,7 @@ public class UserBulkChangeManager extends BasicManager {
 		bundle.setToId(identity);
 		bundle.setContent(translator.translate("mailtemplate.login.denied.subject", args),
 			translator.translate("mailtemplate.login.denied.body", args));
-		CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null);
+		CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null, false);
 	}
 	
 	private String getServerURI() {
diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
index 59fa60da23d..2fd0b29b219 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
@@ -550,7 +550,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 			MailBundle bundle = new MailBundle();
 			bundle.setToId(to);
 			bundle.setContent(title, plaintext.toString());
-			result = CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null);
+			result = CoreSpringFactory.getImpl(MailManager.class).sendExternMessage(bundle, null, false);
 		} catch (Exception e) {
 			// FXOLAT-294 :: sending the mail will throw nullpointer exception if To-Identity has no
 			// valid email-address!, catch it...
diff --git a/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java b/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
index 382f490e96b..b22f3170af2 100644
--- a/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
+++ b/src/main/java/org/olat/core/dispatcher/ErrorFeedbackMailer.java
@@ -99,7 +99,7 @@ public class ErrorFeedbackMailer implements Dispatcher {
 				bundle.setFromId(ident);
 				bundle.setTo(WebappHelper.getMailConfig("mailError"));
 				bundle.setContent("Feedback from Error Nr.: " + errorNr, out.toString());
-				mailManager.sendExternMessage(bundle, null);
+				mailManager.sendExternMessage(bundle, null, false);
 			} else {
 				log.error("Try to send a feedback without identity");
 			}
diff --git a/src/main/java/org/olat/core/util/mail/MailManager.java b/src/main/java/org/olat/core/util/mail/MailManager.java
index 9a3edef8637..c2340c3a532 100644
--- a/src/main/java/org/olat/core/util/mail/MailManager.java
+++ b/src/main/java/org/olat/core/util/mail/MailManager.java
@@ -179,7 +179,7 @@ public interface MailManager {
 	 */
 	public MailerResult sendMessage(MailBundle... bundles);
 	
-	public MailerResult sendExternMessage(MailBundle bundle, MailerResult result);
+	public MailerResult sendExternMessage(MailBundle bundle, MailerResult result, boolean useTemplate);
 	
 	public MimeMessage createMimeMessage(Address from, Address[] tos, Address[] ccs, Address[] bccs, String subject, String body,
 			List<File> attachments, MailerResult result);
diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
index 0515938d218..a0d0b3b29f2 100644
--- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
+++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
@@ -841,9 +841,13 @@ public class MailManagerImpl implements MailManager, InitializingBean  {
 	}
 	
 	@Override
-	public MailerResult sendExternMessage(MailBundle bundle, MailerResult result) {
-		return sendExternMessage(bundle.getFromId(), bundle.getFrom(), bundle.getToId(), bundle.getTo(), bundle.getCc(), bundle.getContactLists(),
-				bundle.getContent(), result);
+	public MailerResult sendExternMessage(MailBundle bundle, MailerResult result, boolean useTemplate) {
+		MailContent content = bundle.getContent();
+		if(useTemplate) {
+			content = decorateMail(bundle);
+		}
+		return sendExternMessage(bundle.getFromId(), bundle.getFrom(), bundle.getToId(), bundle.getTo(), bundle.getCc(),
+				bundle.getContactLists(), content, result);
 	}
 	
 	
diff --git a/src/main/java/org/olat/registration/PwChangeController.java b/src/main/java/org/olat/registration/PwChangeController.java
index 744f4cb05d2..14b47e9fb96 100644
--- a/src/main/java/org/olat/registration/PwChangeController.java
+++ b/src/main/java/org/olat/registration/PwChangeController.java
@@ -254,7 +254,7 @@ public class PwChangeController extends BasicController {
 					MailBundle bundle = new MailBundle();
 					bundle.setToId(identity);
 					bundle.setContent(userTrans.translate("pwchange.subject"), body.toString());
-					MailerResult result = mailManager.sendExternMessage(bundle, null);
+					MailerResult result = mailManager.sendExternMessage(bundle, null, false);
 					if(result.getReturnCode() == 0) {
 						getWindowControl().setInfo(translate("email.sent"));
 						// prepare next step
diff --git a/src/main/java/org/olat/registration/RegistrationController.java b/src/main/java/org/olat/registration/RegistrationController.java
index dcd4b1475d4..5c1af935791 100644
--- a/src/main/java/org/olat/registration/RegistrationController.java
+++ b/src/main/java/org/olat/registration/RegistrationController.java
@@ -97,6 +97,14 @@ public class RegistrationController extends BasicController implements Activatea
 	private String uniqueRegistrationKey;
 	private TemporaryKeyImpl tempKey;
 	
+	@Autowired
+	private I18nManager i18nManager;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private MailManager mailManager;
+	@Autowired
+	private RegistrationModule registrationModule;
 	@Autowired
 	private RegistrationManager registrationManager;
 
@@ -107,7 +115,7 @@ public class RegistrationController extends BasicController implements Activatea
 	 */
 	public RegistrationController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);		
-		if (!CoreSpringFactory.getImpl(RegistrationModule.class).isSelfRegistrationEnabled()) {
+		if (!registrationModule.isSelfRegistrationEnabled()) {
 			String contact = WebappHelper.getMailConfig("mailSupport");
 			String text = translate("reg.error.disabled.body", new String[]{ contact });
 			MessageController msg = MessageUIFactory.createWarnMessage(ureq, getWindowControl(), null, text);
@@ -123,14 +131,14 @@ public class RegistrationController extends BasicController implements Activatea
 			// support for legacy lang parameter
 			lang = ureq.getParameter("lang");
 		}
-		if (lang != null && ! lang.equals(I18nManager.getInstance().getLocaleKey(getLocale()))) {
-			Locale loc = I18nManager.getInstance().getLocaleOrDefault(lang);
+		if (lang != null && ! lang.equals(i18nManager.getLocaleKey(getLocale()))) {
+			Locale loc = i18nManager.getLocaleOrDefault(lang);
 			ureq.getUserSession().setLocale(loc);
 			setLocale(loc, true);
-			setTranslator(UserManager.getInstance().getPropertyHandlerTranslator(Util.createPackageTranslator(this.getClass(), loc)));			
+			setTranslator(userManager.getPropertyHandlerTranslator(Util.createPackageTranslator(this.getClass(), loc)));			
 		}	else {
 			// set fallback only
-			setTranslator(UserManager.getInstance().getPropertyHandlerTranslator(getTranslator()));			
+			setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));			
 		}
 		
 		//construct content
@@ -283,26 +291,37 @@ public class RegistrationController extends BasicController implements Activatea
 				boolean foundUser = UserManager.getInstance().userExist(email);
 				// get remote address
 				String ip = ureq.getHttpReq().getRemoteAddr();
-				String body = null;
+				String serverpath = Settings.getServerContextPathURI();
 				String today = DateFormat.getDateInstance(DateFormat.LONG, ureq.getLocale()).format(new Date());
-				MailManager mailM = CoreSpringFactory.getImpl(MailManager.class);
+				String[] whereFromAttrs = new String[]{
+					serverpath, today, ip
+				};
 
-				String serverpath = Settings.getServerContextPathURI();
 				boolean isMailSent = false;
 				if (!foundUser) {
 					TemporaryKey tk = registrationManager.loadTemporaryKeyByEmail(email);
 					if (tk == null) tk = registrationManager.createTemporaryKeyByEmail(email, ip, RegistrationManager.REGISTRATION);
 					myContent.contextPut("regKey", tk.getRegistrationKey());
-					body = getTranslator().translate("reg.body",
-							new String[] { serverpath, tk.getRegistrationKey(), I18nManager.getInstance().getLocaleKey(ureq.getLocale()) })
-							+ SEPARATOR
-							+ getTranslator().translate("reg.wherefrom", new String [] { serverpath, today, ip });
+					
+					String link = serverpath + "/dmz/registration/index.html?key=" + tk.getRegistrationKey() + "&language=" + i18nManager.getLocaleKey(ureq.getLocale());
+					String[] bodyAttrs = new String[]{
+						serverpath,										//0
+						tk.getRegistrationKey(),						//1
+						i18nManager.getLocaleKey(ureq.getLocale()),		//2
+						"<a href=\"" + link + "\">" + link + "</a>"		//3
+					};
+					
+					String body = translate("reg.body", bodyAttrs);
+					boolean htmlBody = StringHelper.isHtml(body);
+					if(!htmlBody) {
+						body += SEPARATOR + translate("reg.wherefrom", whereFromAttrs);
+					}
 					
 					try {
 						MailBundle bundle = new MailBundle();
 						bundle.setTo(email);
 						bundle.setContent(translate("reg.subject"), body);
-						MailerResult result = mailM.sendExternMessage(bundle, null);
+						MailerResult result = mailManager.sendExternMessage(bundle, null, htmlBody);
 						if (result.isSuccessful()) {
 							isMailSent = true;
 						}
@@ -313,14 +332,12 @@ public class RegistrationController extends BasicController implements Activatea
 					// a user exists, this is an error in the registration page
 					// send email
 					Identity identity = UserManager.getInstance().findIdentityByEmail(email);
-					body = translate("login.body", identity.getName()) + SEPARATOR
-							+ getTranslator().translate("reg.wherefrom", new String[] { serverpath, today, ip });
+					String body = translate("login.body", identity.getName()) + SEPARATOR + translate("reg.wherefrom", whereFromAttrs);
 					try {
 						MailBundle bundle = new MailBundle();
 						bundle.setTo(email);
 						bundle.setContent(translate("login.subject"), body);
-						
-						MailerResult result = mailM.sendExternMessage(bundle, null);
+						MailerResult result = mailManager.sendExternMessage(bundle, null, true);
 						if (result.isSuccessful()) {
 							isMailSent = true;
 						}
@@ -330,7 +347,9 @@ public class RegistrationController extends BasicController implements Activatea
 				}
 				if (isMailSent) {
 					showInfo("email.sent");
-				} else showError("email.notsent");
+				} else {
+					showError("email.notsent");
+				}
 			} else if (event == Event.CANCELLED_EVENT) {
 				fireEvent(ureq, Event.CANCELLED_EVENT);
 			}
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
index 48ec14e7788..d3288c4db60 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_ar.properties
@@ -46,7 +46,7 @@ pwdhelp=</li><li>\u064a\u062c\u0628 \u0623\u0646 \u062a\u062d\u062a\u0648\u0649
 pwform.cancelled=\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u060c \u0648\u0628\u0627\u0644\u062a\u0627\u0644\u0649 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0645 \u062a\u062a\u063a\u064a\u0631.
 pwform.failed=\u062d\u062f\u062b \u062e\u0637\u0623 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639\u060c \u0648\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643 \u0644\u0645 \u064a\u062a\u0645 \u062a\u063a\u064a\u064a\u0631\u0647\u0627.
 pwkey.missingentry=\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u0641\u062a\u0627\u062d \u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.
-reg.body=\u0634\u0643\u0631\u0627 \u0644\u0627\u0647\u062a\u0645\u0627\u0645\u0643 \u0628\u0623\u0648\u0644\u0627\u062a\r\n\r\n{0}/dmz/registration/index.html?key\={1}&language\={2} \u064a\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0627\u0628\u0637\r\n\u0644\u0627\u0633\u062a\u0643\u0645\u0627\u0644 \u062a\u0633\u062c\u064a\u0644\u0643 \u0641\u0649 \u0623\u0648\u0644\u0627\u062a.\r\n\r\n\u0641\u064a \u062d\u0627\u0644\u0629 \u0639\u062f\u0645 \u0631\u063a\u0628\u062a\u0643 \u0641\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u060c \u0641\u0642\u0637 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u0649.\r\n\r\n\u0641\u0631\u064a\u0642 \u0623\u0648\u0644\u0627\u062a
+reg.body=<p>\u0634\u0643\u0631\u0627 \u0644\u0627\u0647\u062a\u0645\u0627\u0645\u0643 \u0628\u0623\u0648\u0644\u0627\u062a</p><p>{3} \u064a\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0627\u0628\u0637</p><p>\u0644\u0627\u0633\u062a\u0643\u0645\u0627\u0644 \u062a\u0633\u062c\u064a\u0644\u0643 \u0641\u0649 \u0623\u0648\u0644\u0627\u062a.</p><p>\u0641\u064a \u062d\u0627\u0644\u0629 \u0639\u062f\u0645 \u0631\u063a\u0628\u062a\u0643 \u0641\u0649 \u0627\u0644\u062a\u0633\u062c\u064a\u0644\u060c \u0641\u0642\u0637 \u062a\u062c\u0627\u0647\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u0649.</p><p>\u0641\u0631\u064a\u0642 \u0623\u0648\u0644\u0627\u062a</p>
 reg.notiEmail.body=\u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0641\u0649 \u0623\u0648\u0644\u0627\u062a\:\r\n\r\n\u0627\u0644\u0627\u0633\u0645\:  \t{2}\r\n\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644\:     \t{1}\r\n\u0627\u0644\u062f\u062e\u0648\u0644\: \t\t{0}\r\n\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u0649\:  \t{3}\r\n\u0627\u0644\u0644\u063a\u0629\: \t\t{4}\r\n \u0627\u0644\u0633\u064a\u0631\u0641\u0631\: \t\t{5}
 reg.notiEmail.subject=({0}) {2} {1} \u0645\u0633\u062a\u062e\u062f\u0645 \u062c\u062f\u064a\u062f \u0628\u0623\u0648\u0644\u0627\u062a
 reg.subject=\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u062a\u0633\u062c\u064a\u0644 \u0641\u0649 \u0623\u0648\u0644\u0627\u062a
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
index 846384cbf4d..2dfea701d08 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_bg.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=\u041c\u043e\u043b\u044f, \u043f\u0440\u0435\u0434\u0430\u0
 pwdhelp=\u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430<ul><li>\u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u043f\u043e\u043d\u0435 4 \u0437\u043d\u0430\u043a\u0430</li><li>\u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0431\u0443\u043a\u0432\u0438 \u0438 \u043f\u043e\u043d\u0435 \u0435\u0434\u043d\u0430 \u0446\u0438\u0444\u0440\u0430</li><li>\u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0435 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0443\u043c\u043b\u0430\u0443\u0442\u0438 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u043d\u0438 \u0431\u0443\u043a\u0432\u0438 \u043a\u0430\u0442\u043e \u00fc, \u00e4, \u00e9</li><li>\u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0435 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u043f\u0440\u0430\u0437\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430</li><li>\u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u043d\u0438 \u0437\u043d\u0430\u0446\u0438\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=\u041f\u0440\u043e\u043c\u044f\u043d\u0430\u0442\u0430 \u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430 \u0435 \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430. \u041f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043e\u0441\u0442\u0430\u0432\u0430 \u043d\u0435\u043f\u0440\u043e\u043c\u0435\u043d\u0435\u043d\u0430.
 pwkey.missingentry=\u041a\u043b\u044e\u0447\u044a\u0442 \u0437\u0430 \u043f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.
-reg.body=\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0430 \u0432\u0430\u0448\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430.\r\n\r\n\u041c\u043e\u043b\u044f \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 {0}/dmz/registration/index.html?key\={1}&language\={2},\r\n\u0437\u0430 \u0434\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430.\r\n\r\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0439, \u0447\u0435 \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 \u0439-\u043c\u0430\u0439\u043b.
+reg.body=<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0430 \u0432\u0430\u0448\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430.</p><p>\u041c\u043e\u043b\u044f \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 {3},<br>\u0437\u0430 \u0434\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430.</p><p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0439, \u0447\u0435 \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 \u0439-\u043c\u0430\u0439\u043b.</p>
 reg.notiEmail.body=\u041d\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430 \u0442\u043e\u043a\u0443-\u0449\u043e\: \r\n\r\n\u0418\u043c\u0435\: \t{2}\r\n\u0418\u043c\u0435\: \t\t{1}\r\n\u0412\u043b\u0438\u0437\u0430\u043d\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430\: \t\t{0}\r\n\u0418-\u043c\u0435\u0439\u043b\: \t{3}\r\n\u0415\u0437\u0438\u043a\: \t\t{4}\r\n\u0421\u044a\u0440\u0432\u044a\u0440\: \t\t{5}
 reg.notiEmail.subject=\u041d\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430\: {1} {2} ({0})
 reg.subject=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043a\u043b\u044e\u0447 \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
index d06ecdcf299..7ce07328f9a 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_cs.properties
@@ -36,7 +36,7 @@ pwdchangekey.missing=Pros\u00EDm potvr\u010Fte kl\u00ED\u010D pro zm\u011Bnu hes
 pwdhelp=Heslo<ul><li>Mus\u00ED obsahovat alespo\u0148 4 znaky</li><li>mus\u00ED obsahovat alespo\u0148 jedno \u010D\u00EDslo</li><li>nesm\u00ED obsahovat diakritiku a speci\u00E1ln\u00ED znaky jako \u00FC, \u00E4, \u00E9</li><li>nesm\u00ED obsahovat mezery a tabul\u00E1tory</li><li>m\u016F\u017Ee obsahovat n\u00E1sleduj\u00EDc\u00ED znaky\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=Zm\u011Bna hesla zru\u0161ena. Heslo z\u016Fstalo stejn\u00E9.
 pwkey.missingentry=Kl\u00ED\u010D pro zm\u011Bnu hesla nenalezen.
-reg.body=D\u011Bkujeme za z\u00E1jem.\n\nPou\u017Eijte odkaz {0}/dmz/registration/index.html?key\={1}&language\={2} \nk \u00FApln\u00E9 registraci.\n\nPokud se nechcete zaregistrovat, tento e-mail ignorujte.\n\nSpr\u00E1va syst\u00E9mu.\n
+reg.body=<p>D\u011Bkujeme za z\u00E1jem.</p><p>Pou\u017Eijte odkaz {3}</p><p>k \u00FApln\u00E9 registraci.</p><p>Pokud se nechcete zaregistrovat, tento e-mail ignorujte.</p><p>Spr\u00E1va syst\u00E9mu.</p>
 reg.notiEmail.body=Byl zaregistrov\u00E1n nov\u00FD u\u017Eivatel OpenOLATu\: \n\nJm\u00E9no\: \t{2}\nJm\u00E9no\: \t\t{1}\nU\u017Eivatelsk\u00E9 jm\u00E9no\: \t\t{0}\nE-mail\: \t{3}\nJazyk\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Nov\u00FD u\u017Eivatel OpenOLATu\: {1} {2} ({0})
 reg.subject=Registra\u010Dn\u00ED kl\u00ED\u010D
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
index 49b093ad351..f278ad08a39 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_da.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=Send venligst n\u00F8gle for kodeordsskift.
 pwdhelp=Kodeord <ul><li>skal indeholde mindst 4 tegn<ul><li>skal best\u00E5 af bogstaver og mindst et tal</li><li>m\u00E5 ikke indeholde specialtegn som \u00FC, \u00E4, \u00E9</li><li>m\u00E5 ikke indeholde mellemrum eller escape sekvenser</li><li>m\u00E5 indeholde f\u00F8lgende specialtegn\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul> 
 pwform.cancelled=OpenOLAT kodeordsskift er afbrudt. Kodeord er u\u00E6ndret.
 pwkey.missingentry=N\u00F8gle til OpenOLAT kodeordsskift er ikke fundet.
-reg.body=Tak for din interesse i OpenOLAT.\n\nBenyt venligst dette link {0}/dmz/registration/index.html?key\={1}&language\={2} \nfor at afslutte registreringen.\n\nHvis du ikke \u00F8nsker at registrere, skal du blot ignorere denne e-mail.\n\nDit OpenOLAT team.\n
+reg.body=<p>Tak for din interesse i OpenOLAT.</p><p>Benyt venligst dette link {3}</p><p>for at afslutte registreringen.</p><p>Hvis du ikke \u00F8nsker at registrere, skal du blot ignorere denne e-mail.</p><p>Dit OpenOLAT team.</p>
 reg.notiEmail.body=En ny OpenOLAT bruger har netop registreret\: \n\nNavn\: \t{2}\nFornavn\: \t\t{1}\nLogin\: \t\t{0}\nE-mail\: \t{3}\nSprog\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Ny OpenOLAT bruger\: {1} {2} ({0})
 reg.subject=Registreringsn\u00F8gle til OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
index 552f1b5d972..6f3f4933ce4 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_de.properties
@@ -66,7 +66,7 @@ pwdhelp=Das Passwort<ul><li>muss mindestens 4 Zeichen haben</li><li>muss Buchsta
 pwform.cancelled=Die Eingabe eines neuen OpenOLAT-Passwortes wurde abgebrochen. Das Passwort bleibt unver\u00E4ndert.
 pwform.failed=Ein unerwarteter Fehler ist aufgetreten. Das Passwort bleibt unver\u00E4ndert.
 pwkey.missingentry=Es wurde kein Schl\u00FCssel gefunden, um Ihr OpenOLAT-Passwort neu zu setzen.
-reg.body=Vielen Dank f\u00FCr Ihr Interesse an OpenOLAT.\n\n\u00DCber den Link {0}/dmz/registration/index.html?key\={1}&language\={2} \nk\u00F6nnen Sie die Registrierung vervollst\u00E4ndigen. \n\nFalls Sie sich doch nicht registrieren wollen, l\u00F6schen Sie diese E-Mail.\n\nIhr OpenOLAT-Team \n
+reg.body=<p>Vielen Dank f\u00FCr Ihr Interesse an OpenOLAT.</p><p>\u00DCber den Link {3}<br>k\u00F6nnen Sie die Registrierung vervollst\u00E4ndigen.</p><p>Falls Sie sich doch nicht registrieren wollen, l\u00F6schen Sie diese E-Mail.</p><p>Ihr OpenOLAT-Team</p>
 reg.notiEmail.body=Soeben hat sich ein neuer Benutzer in OpenOLAT registriert\: \n\nName\: \t{2}\nVorname\: \t\t{1}\nLogin\: \t\t{0}\nE-Mail\: \t{3}\nSprache\: \t\t{4}\nServer\: \t\t{5}
 reg.notiEmail.subject=Neuer OpenOLAT-Benutzer\: {1} {2} ({0})
 reg.subject=Registrierungsschl\u00FCssel f\u00FCr OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
index 8dc732243ed..7213be3b236 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_el.properties
@@ -46,7 +46,7 @@ pwdhelp=\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03
 pwform.cancelled=\u0397 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c4\u03bf\u03c5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03c3\u03c4\u03bf OpenOLAT \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5. \u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03cc\u03c0\u03c9\u03c2 \u03ae\u03c4\u03b1\u03bd.
 pwform.failed=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03b5\u03bd\u03b1 \u03b1\u03c0\u03c1\u03bf\u03c3\u03b4\u03cc\u03ba\u03b7\u03c4\u03bf \u03bb\u03ac\u03b8\u03bf\u03c2 \u03b5\u03be\u03c5\u03c0\u03b7\u03c1\u03b5\u03c4\u03b7\u03c4\u03ae. \u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03ac\u03bb\u03bb\u03b1\u03be\u03b5.
 pwkey.missingentry=\u03a4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c4\u03bf\u03c5 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5.
-reg.body=\u03a3\u03b1\u03c2 \u03b5\u03c5\u03c7\u03b1\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd\u03bc\u03b5.\n\n\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf {0}/dmz/registration/index.html?key\={1}&language\={2} \n\u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03b1\u03c2.\n\n\u03a3\u03b5 \u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c4\u03b5, \u03b1\u03b3\u03bd\u03bf\u03ae\u03c3\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf e-mail.\n\n\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 \u03c4\u03bf\u03c5 OpenOLAT.\n
+reg.body=<p>\u03a3\u03b1\u03c2 \u03b5\u03c5\u03c7\u03b1\u03c1\u03b9\u03c3\u03c4\u03bf\u03cd\u03bc\u03b5.</p><p>\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf {3}</p><p>03b3\u03b9\u03b1 \u03bd\u03b1 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03b1\u03c2.\n\n\u03a3\u03b5 \u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c4\u03b5, \u03b1\u03b3\u03bd\u03bf\u03ae\u03c3\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf e-mail.</p><p>\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 \u03c4\u03bf\u03c5 OpenOLAT.</p>
 reg.error.no_username=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03b4\u03b5 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5
 reg.error.title=\u0397 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
 reg.error.user_in_use=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
index 8c44e4d77fb..5aaf23ade43 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_en.properties
@@ -67,7 +67,7 @@ pwdhelp=A password<ul><li>must contain at least 4 characters</li><li>must contai
 pwform.cancelled=OpenOLAT password change was cancelled. Password remains unchanged.
 pwform.failed=An unexpected server error occurred. Your password was not altered.
 pwkey.missingentry=Key for OpenOLAT password change not found.
-reg.body=Thank you for your interest in OpenOLAT.\r\n\r\nPlease use the link {0}/dmz/registration/index.html?key\={1}&language\={2} \r\nto complete your registration.\r\n\r\nIn case you do not want to register, just ignore this e-mail.\r\n\r\nYour OpenOLAT team
+reg.body=<p>Thank you for your interest in OpenOLAT.</p><p>Please use the link {3}<br>to complete your registration.</p><p>In case you do not want to register, just ignore this e-mail.</p><p>Your OpenOLAT team</p>
 reg.error.disabled.body=The self registration for this system has been disabled. Please contact the system administrator ({0}) in order to gain access. 
 reg.error.no_username=User name could not be created
 reg.error.title=Registration cancelled
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
index ff1315a6e1c..18a068ba30e 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_es.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=Por favor env\u00EDa la clave para cambiar la contrase\u00F
 pwdhelp=La contrase\u00F1a<ul><li>debe contener al menos 4 caracteres</li><li>debe contener letras y al menos un n\u00FAmero</li><li>no debe contener di\u00E9resis u otros caracteres especiales como \u00FC, \u00E4, \u00E9</li><li>no debe contener espacios</li><li>no debe contener los caracteres especiales\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=El cambio de contrase\u00F1a OpenOLAT ha sido cancelada. La contrase\u00F1a se mantiene inalterada.
 pwkey.missingentry=No se ha encontrado la clave para cambiar la contrase\u00F1a OpenOLAT.
-reg.body=Gracias por tu inter\u00E9s en OpenOLAT.\n\nPor favor utiliza el enlace {0}/dmz/registration/index.html?key\={1}&language\={2} \npara completar el registro.\n\nEn caso de no querer registrarte, ignora este e-mail.\n\nTu equipo OpenOLAT.\n
+reg.body=<p>Gracias por tu inter\u00E9s en OpenOLAT.</p><p>Por favor utiliza el enlace {3} \npara completar el registro.</p><p>En caso de no querer registrarte, ignora este e-mail.</p><p>Tu equipo OpenOLAT.</p>
 reg.notiEmail.body=Un nuevo usuario OpenOLAT esta registrado\: \n\nNombre\: \t{2}\nApellido\: \t\t{1}\nUsario\: \t\t{0}\nE-Mail\: \t{3}\nIdioma\: \t\t{4}\nServidor\: \t\t{5}
 reg.notiEmail.subject=Nuevo usuario OpenOLAT\: {1} {2} ({0})
 reg.subject=Clave de registro para OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
index 493882ca40b..8e5077bf48b 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_fr.properties
@@ -67,7 +67,7 @@ pwdhelp=Le mot de passe <ul><li>doit \u00EAtre compos\u00E9 au minimum de 4 cara
 pwform.cancelled=L'introduction d'un nouveau mot de passe OpenOLAT a \u00E9t\u00E9 interrompu. Le mot de passe reste inchang\u00E9.
 pwform.failed=Une erreur inattendue est survenue. Le mot de passe reste inchang\u00E9.
 pwkey.missingentry=Aucune cl\u00E9 n'a \u00E9t\u00E9 trouv\u00E9e pour vous affecter un nouveau mot de passe OpenOLAT.
-reg.body=Merci beaucoup pour l'int\u00E9r\u00EAt que vous portez \u00E0 OpenOLAT.\r\n\r\n A cette adresse {0}/dmz/registration/index.html?key\={1}&language\={2} \r\n vous pourrez compl\u00E9ter votre enregistrement. \r\n\r\nSi vous ne voulez plus vous enregistrer, supprimez cet e-mail.\r\n\r\nVotre \u00E9quipe OpenOLAT
+reg.body=<p>Merci beaucoup pour l'int\u00E9r\u00EAt que vous portez \u00E0 OpenOLAT.</p><p>A cette adresse {3} vous pourrez compl\u00E9ter votre enregistrement.</p><p>Si vous ne souhaitez plus vous enregistrer, supprimez simplement cet e-mail.</p><p>Votre \u00E9quipe OpenOLAT</p>
 reg.error.disabled.body=L'auto-enregistrement a \u00E9t\u00E9 d\u00E9sactiv\u00E9 pour ce syst\u00E8me. S'il vous pla\u00EEt, contactez l'administrateur syst\u00E8me {0} pour en obtenir l'acc\u00E8s.
 reg.error.no_username=Le nom d'utilisateur n'a pas \u00E9t\u00E9 cr\u00E9\u00E9.
 reg.error.title=Enregistrement interrompu
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
index e230aabbc34..b337e46bf13 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_it.properties
@@ -46,7 +46,7 @@ pwdhelp=La password<ul><li>deve contenere almeno 4 segni</li><li>deve consistere
 pwform.cancelled=La procedura di impostazione della nuova password \u00E8 stata interrotta. La password rimane immutata.
 pwform.failed=Errore inatteso\: la password non viene modificata.
 pwkey.missingentry=La chiave per impostare la Sua nuova password non \u00E8 stata trovata.
-reg.body=Grazie per il Suo interessamento a OpenOLAT.\r\n\r\nPresso {0}/dmz/registration/index.html?key\={1}&language\={2} \r\npu\u00F2 completare la registrazione. \r\n\r\nNel caso non si voglia ancora registrare, cancelli senz'altro questa e-mail.\r\n\r\nIl Suo team OpenOLAT
+reg.body=<p>Grazie per il Suo interessamento a OpenOLAT.</p><p>Presso {3}<br>pu\u00F2 completare la registrazione.</p><p>Nel caso non si voglia ancora registrare, cancelli senz'altro questa e-mail.</p><p>Il Suo team OpenOLAT</p>
 reg.error.no_username=Il nome d'utente non \u00E8 stato creato.
 reg.error.title=Registrazione interrotta
 reg.error.user_in_use=Il nome d'utente esiste gi\u00E0
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
index 38bc0f89dca..281153633af 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_jp.properties
@@ -43,7 +43,7 @@ pwdchangekey.missing=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\u306e\u30ad\u30f
 pwform.cancelled=OpenOLAT\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u306a\u3044\u307e\u307e\u3067\u3059\u3002
 pwform.failed=\u4e88\u671f\u3057\u306a\u3044\u30b5\u30fc\u30d0\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
 pwkey.missingentry=OpenOLAT\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\u306e\u30ad\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-reg.body=OpenOLAT\u306b\u8208\u5473\u3092\u6301\u3063\u3066\u3044\u305f\u3060\u3044\u3066\u3001\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\r\n\r\n\u767b\u9332\u3092\u5b8c\u4e86\u3059\u308b\u306b\u306f\u3001\u30ea\u30f3\u30af {0}/dmz/registration/index.html?key\={1}&language\={2} \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n\r\n\u3042\u306a\u305f\u304c\u767b\u9332\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u3001\u3053\u306eE\u30e1\u30fc\u30eb\u3092\u7121\u8996\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n\r\nOpenOLAT\u30c1\u30fc\u30e0
+reg.body=<p>OpenOLAT\u306b\u8208\u5473\u3092\u6301\u3063\u3066\u3044\u305f\u3060\u3044\u3066\u3001\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002</p><p>\u767b\u9332\u3092\u5b8c\u4e86\u3059\u308b\u306b\u306f\u3001\u30ea\u30f3\u30af {3} \u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002</p><p>\u3042\u306a\u305f\u304c\u767b\u9332\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u3001\u3053\u306eE\u30e1\u30fc\u30eb\u3092\u7121\u8996\u3057\u3066\u304f\u3060\u3055\u3044\u3002</p><p>OpenOLAT\u30c1\u30fc\u30e0</p>
 reg.error.no_username=\u30e6\u30fc\u30b6\u540d\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
 reg.error.title=\u767b\u9332\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002
 reg.error.user_in_use=\u3053\u306e\u30e6\u30fc\u30b6\u540d\u306f\u3059\u3067\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_lt.properties
index b8c2f4fada4..171e53437d6 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_lt.properties
@@ -33,7 +33,7 @@ pwdchangekey.missing=Pra\u0161ome \u012Fveskite rakt\u0105 slapta\u017Eod\u017Ei
 pwdhelp=Slapta\u017Eod\u012F<ul><li>gali sudaryti ma\u017Eiausiai 4 simboliai</li><li>raid\u0117s ir skai\u010Diai</li><li>negali b\u016Bti umliaut\u0173 ar kit\u0173 specifini\u0173 raid\u017Ei\u0173, kaip \u00FC, \u00E4, \u00E9</li><li>negali sudaryti tu\u0161ti langeliai ar kaitos sekos</li><li>gali sudaryti kiti simboliai, tokie kaip\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=Slapta\u017Eod\u017Eio pakeitimas atmestas. Slapta\u017Eodis lieka nepakeistas.
 pwkey.missingentry=Raktas slapta\u017Eod\u017Eio pakeitimui nerastas.
-reg.body=D\u0117kojame, kad domit\u0117s E. para\u0161o nuotolinio mokymo sistema.\n\nPra\u0161ome pasinaudoti nuoroda {0}/dmz/registration/index.html?key\={1}&language\={2} \nu\u017Ebaigti registracij\u0105.\n\nJei j\u016Bs nenorite registruotis, ignoruokit \u0161\u012F lai\u0161k\u0105.\n\nJ\u016Bs\u0173 E. para\u0161o nuotolinio mokymo sistemos komanda.\n
+reg.body=<p>D\u0117kojame, kad domit\u0117s E. para\u0161o nuotolinio mokymo sistema.</p><p>Pra\u0161ome pasinaudoti nuoroda {3}<br>u\u017Ebaigti registracij\u0105.</p><p>Jei j\u016Bs nenorite registruotis, ignoruokit \u0161\u012F lai\u0161k\u0105.</p><p>J\u016Bs\u0173 E. para\u0161o nuotolinio mokymo sistemos komanda.</p>
 reg.subject=Registracijos raktas
 reg.wherefrom=Registracijos u\u017Eklausa serveriui {0} buvo atlikta {1} \ni\u0161 IP adreso {2}.
 registration.form.cancelled=J\u016Bs at\u0161auk\u0117te registracijos proces\u0105.
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
index ac90ae3e13f..e16d6efbf7b 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_nl_NL.properties
@@ -46,7 +46,7 @@ pwdhelp=Het wachtwoord <ul><li>moet ten minste 4 tekens bevatten</li><li>moet le
 pwform.cancelled=De wijziging van het OpenOLAT-wachtwoord werd ongedaan gemaakt. Het wachtwoord blijft ongewijzigd.
 pwform.failed=Er trad een onvoorziene serverfout op. Uw wachtwoord werd niet veranderd.
 pwkey.missingentry=Geen toegangscode voor OpenOLAT-wachtwoord gevonden.
-reg.body=Hartelijk dank voor uw interesse in OpenOLAT.\\n\\n Gebruik de link {0}/dmz/registratie/index.html?key\={1}&language\={2} \\n om de registratie te vervolledigen.\\n\\nNegeer deze e-mail als u zich niet wil registreren.\\n\\nUw OpenOLAT -team.\\n
+reg.body=<p>Hartelijk dank voor uw interesse in OpenOLAT.</p><p>Gebruik de link {3}<br>om de registratie te vervolledigen.</p><p>Negeer deze e-mail als u zich niet wil registreren.</p><p>Uw OpenOLAT -team.</p>
 reg.error.no_username=Gebruikersnaam kon niet aangemaakt worden
 reg.error.title=Registratie geannuleerd
 reg.error.user_in_use=Deze gebruikersnaam bestaat al
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
index f9a31ddbe00..5dd83cfbf84 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties
@@ -52,7 +52,7 @@ pwdhelp=Has\u0142o<ul><li>musi zawiera\u0107 co najmniej 4 znaki</li><li>musi za
 pwform.cancelled=Zmiana has\u0142a zosta\u0142a anulowana. Pozostaje wcze\u015Bniejsze has\u0142o.
 pwform.failed=Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d serwera. Twoje has\u0142o nie zosta\u0142o zmienione.
 pwkey.missingentry=Nie znaleziono klucza do zmiany has\u0142a.
-reg.body=Dzi\u0119kujemy za zainteresowanie OpenOLAT.\n\nU\u017Cyj linka {0}/dmz/registration/index.html?key\={1}&language\={2} \naby uko\u0144czy\u0107 rejestracj\u0119.\n\nJe\u015Bli nie chcesz si\u0119 zarejestrowa\u0107, zignoruj ten e-mail.\n\nZesp\u00F3\u0142 OpenOLAT.\n
+reg.body=<p>Dzi\u0119kujemy za zainteresowanie OpenOLAT.</p><p>U\u017Cyj linka {3}<br>aby uko\u0144czy\u0107 rejestracj\u0119.</p><p>Je\u015Bli nie chcesz si\u0119 zarejestrowa\u0107, zignoruj ten e-mail.</p><p>Zesp\u00F3\u0142 OpenOLAT.</p>
 reg.error.no_username=Nie uda\u0142o si\u0119 utworzy\u0107 nazwy u\u017Cytkownika
 reg.error.title=Rejestracja anulowana
 reg.error.user_in_use=Podana nazwa u\u017Cytkownika ju\u017C istnieje
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
index 12b532de4f1..55312b2456b 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties
@@ -67,7 +67,7 @@ pwdhelp=A senha<ul><li>deve conter pelo menos  4 caracteres</li><li>deve conter
 pwform.cancelled=Altera\u00E7\u00E3o da senha OpenOLAT foi cancelada. A senha permanece inalterada.
 pwform.failed=Um erro inesperado ocorreu no servidor. Sua senha n\u00E3o foi alterada.
 pwkey.missingentry=Chave para altera\u00E7\u00E3o de senha OLA n\u00E3o encontrada.
-reg.body=Agradecemos seu interesse no OpenOLAT.\n\nFavor usar o link {0}/dmz/registration/index.html?key\={1}&language\={2} \npara completar o registro.\n\nCaso n\u00E3o queira registrar-se, ignore este e-mail.\n\nSua Equipe OpenOLAT.\n
+reg.body=<p>Agradecemos seu interesse no OpenOLAT.</p><p>Favor usar o link {3}</p><p>para completar o registro.</p><p>Caso n\u00E3o queira registrar-se, ignore este e-mail.</p><p>Sua Equipe OpenOLAT.</p>
 reg.error.no_username=Nome de Usu\u00E1rio n\u00E3o pode ser criado
 reg.error.title=Registro cancelado
 reg.error.user_in_use=Esse nome de usu\u00E1rio j\u00E1 existe
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
index 41c27a19204..928fa2c66eb 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_PT.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=Favor submeter a chave para altera\u00E7\u00E3o de senha.
 pwdhelp=A senha<ul><li>deve conter pelo menos  4 caracteres</li><li>deve conter letras e pelo menos um d\u00EDgito</li><li>n\u00E3o deve conter mai\u00FAsculas ou letras especiais como \u00FC, \u00E4, \u00E9</li><li>n\u00E3o deve conter espa\u00E7os ou sequencias de escape</li><li>pode conter os seguintes caracteres especiais\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=Altera\u00E7\u00E3o da senha OpenOLAT foi cancelada. A senha permanece inalterada.
 pwkey.missingentry=Chave para altera\u00E7\u00E3o de senha OLA n\u00E3o encontrada.
-reg.body=Agradecemos seu interesse no OpenOLAT.\n\nFavor usar o link {0}/dmz/registration/index.html?key\={1}&language\={2} \npara completar o registro.\n\nCaso n\u00E3o queira registrar-se, ignore este e-mail.\n\nSua Equipe OpenOLAT.\n
+reg.body=<p>Agradecemos seu interesse no OpenOLAT.</p><p>Favor usar o link {3}<br>para completar o registro.</p><p>Caso n\u00E3o queira registrar-se, ignore este e-mail.</p><p>Sua Equipe OpenOLAT.</p>
 reg.notiEmail.body=Um novo usu\u00E1rio do OpenOLAT acabou de se registrar\: \n\nNome\: \t{2}\nPrimeiro nome\: \t\t{1}\nLogin\: \t\t{0}\nEmail\: \t{3}\nIdioma\: \t\t{4}\nServidor\: \t\t{5}
 reg.notiEmail.subject=Novo usu\u00E1rio do OpenOLAT \: {1} {2} ({0})
 reg.subject=Chave de registro para OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
index 97ae02d6f13..56deb66f7bd 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_ru.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=\u0423\u043a\u0430\u0436\u0438\u0442\u0435, \u043f\u043e\u0
 pwdhelp=\u041f\u0430\u0440\u043e\u043b\u044c <ul><li>\u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u0437 4-\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432</li><li>\u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u044b \u0438 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u0443 \u0446\u0438\u0444\u0440\u0443</li><li>\u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 \u0438\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00fc, \u00e4, \u00e9</li><li>\u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438 \u0442\u0430\u0431\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 </li><li>\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=\u0412\u0432\u043e\u0434 \u043d\u043e\u0432\u043e\u0433\u043e OpenOLAT-\u043f\u0430\u0440\u043e\u043b\u044f \u0431\u044b\u043b \u043f\u0440\u0435\u0440\u0432\u0430\u043d. \u041f\u0430\u0440\u043e\u043b\u044c \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.  
 pwkey.missingentry=\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f OpenOLAT, \u043d\u0435 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u043a\u043b\u044e\u0447.
-reg.body=\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0412\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 OpenOLAT.\r\n\r\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0441\u044b\u043b\u043a\u0443 {0}/dmz/registration/index.html?key\={1}&language\={2} \r\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0412\u0430\u0448\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \r\n\r\n\u0412 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 e-mail. \r\n\r\n\u0412\u0430\u0448 OpenOLAT \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432
+reg.body=<p>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0412\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 OpenOLAT.</p><p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0441\u044b\u043b\u043a\u0443 {3}<br>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0412\u0430\u0448\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.</p><p>\u0412 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 e-mail.</p><p>\u0412\u0430\u0448 OpenOLAT \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432</p>
 reg.notiEmail.body=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0432 OpenOLAT \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\: \n\n\u0424\u0430\u043c\u0438\u043b\u0438\u044f\: \t{2}\n\u0418\u043c\u044f\: \t\t{1}\n\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\: \t\t{0}\nE-mail\: \t{3}\n\u042f\u0437\u044b\u043a\: \t\t{4}\n\u0421\u0435\u0440\u0432\u0435\u0440\: \t\t{5}
 reg.notiEmail.subject=\u041d\u043e\u0432\u044b\u0439 OpenOLAT-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\: {1} {2} ({0})
 reg.subject=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
index b44a7323424..f7b1fc934dd 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_sq.properties
@@ -37,7 +37,7 @@ pwdchangekey.missing=Ju lutemi paraqitni \u00E7el\u00EBsin p\u00EBr nd\u00EBrrim
 pwdhelp=Fjal\u00EBkalimi<ul><li>duhet t\u00EB p\u00EBrmbaj\u00EB s\u00EB paku 4 karaktere</li><li>duhet t\u00EB p\u00EBrmbaj\u00EB shkronja dhe s\u00EB paku nj\u00EB num\u00EBr</li><li>nuk duhet t\u00EB p\u00EBrmbaj\u00EB ndryshim zanoreje apo shkronja speciale si \u00FC, \u00E4, \u00E9</li><li>nuk duhet t\u00EB p\u00EBrmbaj\u00EB zbraz\u00EBtira</li><li>mund t\u00EB p\u00EBrmbaj\u00EB karakteret speciale n\u00EB vazhdim\: \!  \# $ % &  ( ) * + , - . / \: ; <\=> ? @ [  ] ^ _ ` { | } ~</li></ul>
 pwform.cancelled=Nd\u00EBrrimi i OpenOLAT fjal\u00EBkalimit u anulua. Fjal\u00EBkalimi mbeti i pa nd\u00EBrruar.
 pwkey.missingentry=\u00C7el\u00EBsi p\u00EBr nd\u00EBrrimin e OpenOLAT fjal\u00EBkalimit nuk \u00EBsht\u00EB gjetur.
-reg.body=Faleminderit p\u00EBr interesimin tuaj n\u00EB OpenOLAT.\n\nJu lutemi shfryt\u00EBzoni lidhjen {0}/dmz/registration/index.html?key\={1}&language\={2} \nt\u00EB kompletoni regjistrimin.\n\nN\u00EB rast se nuk doni t\u00EB regjistroheni, vet\u00EBm injoroni k\u00EBt\u00EB e-mail.\n\nEkipi juaj i OpenOLAT.\n
+reg.body=<p>Faleminderit p\u00EBr interesimin tuaj n\u00EB OpenOLAT.</p>Ju lutemi shfryt\u00EBzoni lidhjen {3}<br>t\u00EB kompletoni regjistrimin.</p><p>N\u00EB rast se nuk doni t\u00EB regjistroheni, vet\u00EBm injoroni k\u00EBt\u00EB e-mail.</p><p>Ekipi juaj i OpenOLAT.</p>
 reg.notiEmail.body=Nj\u00EB shfryt\u00EBzues i ri \u00EBsht\u00EB regjistruar\: \n\nMbiemri\: \t{2}\nEmri\: \t\t{1}\nNofka\: \t\t{0}\nE-posta\: \t{3}\nGjuha\: \t\t{4}\nServeri\: \t\t{5}
 reg.notiEmail.subject=Shfryt\u00EBzues i ri i OpenOLAT-it \: {1} {2} ({0})
 reg.subject=\u00C7el\u00EBsi i regjistrimit p\u00EBr OpenOLAT
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
index 06fdfce903c..1c2cb0edde8 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_CN.properties
@@ -61,7 +61,7 @@ pwdhelp=\u5BC6\u7801<ul><li>\u4E00\u5B9A\u81F3\u5C11\u5305\u542B4\u4E2A\u5B57\u7
 pwform.cancelled=OpenOLAT \u4FEE\u6539\u5DF2\u7ECF\u88AB\u53D6\u6D88\uFF0C\u5BC6\u7801\u4FDD\u6301\u4E0D\u53D8\u3002
 pwform.failed=\u53D1\u751F\u672A\u77E5\u9519\u8BEF\u3002\u60A8\u7684\u5BC6\u7801\u6CA1\u6709\u6539\u53D8\u3002
 pwkey.missingentry=\u6CA1\u6709\u627E\u5230OpenOLAT\u5BC6\u7801\u4FEE\u6539\u7684\u5BC6\u94A5\u3002
-reg.body=\u611F\u8C22\u4F60\u5173\u6CE8OpenOLAT.\n\n\u8BF7\u4F7F\u7528\u8FDE\u63A5{0}/dmz/registration/index.html?key\={1}&language\={2} \n\u6765\u5B8C\u6210\u6CE8\u518C\u3002\n\n\u5982\u679C\u4F60\u4E0D\u60F3\u6CE8\u518C\uFF0C\u8BF7\u5FFD\u7565\u6B64e-mail\u3002\n\nOpenOLAT\u5C0F\u7EC4\n
+reg.body=<p>\u611F\u8C22\u4F60\u5173\u6CE8OpenOLAT.</p><p>\u8BF7\u4F7F\u7528\u8FDE\u63A5{3}<br>\u6765\u5B8C\u6210\u6CE8\u518C\u3002</p><p>\u5982\u679C\u4F60\u4E0D\u60F3\u6CE8\u518C\uFF0C\u8BF7\u5FFD\u7565\u6B64e-mail\u3002</p><p>OpenOLAT\u5C0F\u7EC4</p>
 reg.error.no_username=\u65E0\u6CD5\u521B\u5EFA\u7528\u6237\u540D
 reg.error.title=\u5DF2\u53D6\u6D88\u6CE8\u518C
 reg.error.user_in_use=\u6B64\u7528\u6237\u540D\u5DF2\u7ECF\u5B58\u5728
diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
index e018fcd96f5..9eb7adde2d2 100644
--- a/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_zh_TW.properties
@@ -46,7 +46,7 @@ pwdhelp=\u5BC6\u78BC<ul><li>\u5FC5\u9808\u5305\u542B\u81F3\u5C11 4 \u500B\u5B57\
 pwform.cancelled=OpenOLAT \u5BC6\u78BC\u8B8A\u66F4\u5DF2\u7D93\u53D6\u6D88\u3002\u5BC6\u78BC\u4FDD\u6301\u6C92\u8B8A\u3002
 pwform.failed=\u767C\u751F\u4E00\u500B\u975E\u9810\u671F\u7684\u4F3A\u670D\u5668\u932F\u8AA4\u3002\u60A8\u7684\u5BC6\u78BC\u7121\u6CD5\u88AB\u4FEE\u6539\u3002
 pwkey.missingentry=\u627E\u4E0D\u5230 OpenOLAT \u5BC6\u78BC\u8B8A\u66F4\u7684\u6388\u6B0A\u78BC\u3002
-reg.body=\u611F\u8B1D\u60A8\u5C0D OpenOLAT \u7684\u8208\u8DA3\u3002\r\n\r\n\u8ACB\u4F7F\u7528\u9019\u500B\u9023\u7D50 {0}/dmz/registration/index.html?key\={1}&language\={2}\r\n\u4F86\u5B8C\u6210\u8A3B\u518A\u3002\r\n\r\n\u5982\u679C\u60A8\u4E0D\u60F3\u8A3B\u518A\uFF0C\u8ACB\u5FFD\u7565\u9019\u5C01\u96FB\u5B50\u90F5\u4EF6\u3002\r\n\r\n\u60A8\u7684 OpenOLAT \u5718\u968A
+reg.body=<p>\u611F\u8B1D\u60A8\u5C0D OpenOLAT \u7684\u8208\u8DA3\u3002</p><p>\u8ACB\u4F7F\u7528\u9019\u500B\u9023\u7D50 {3}<br>\u4F86\u5B8C\u6210\u8A3B\u518A\u3002</p><p>\u5982\u679C\u60A8\u4E0D\u60F3\u8A3B\u518A\uFF0C\u8ACB\u5FFD\u7565\u9019\u5C01\u96FB\u5B50\u90F5\u4EF6\u3002</p><p>\u60A8\u7684 OpenOLAT \u5718\u968A</p>
 reg.error.no_username=\u7121\u6CD5\u5EFA\u7ACB\u4F7F\u7528\u8005\u540D\u7A31
 reg.error.title=\u53D6\u6D88\u8A3B\u518A
 reg.error.user_in_use=\u9019\u500B\u4F7F\u7528\u8005\u540D\u7A31\u5DF2\u7D93\u5B58\u5728
diff --git a/src/main/java/org/olat/registration/restapi/RegistrationWebService.java b/src/main/java/org/olat/registration/restapi/RegistrationWebService.java
index c25b7de2304..14be04afef3 100644
--- a/src/main/java/org/olat/registration/restapi/RegistrationWebService.java
+++ b/src/main/java/org/olat/registration/restapi/RegistrationWebService.java
@@ -123,15 +123,18 @@ public class RegistrationWebService {
 				tk = rm.createTemporaryKeyByEmail(email, ip, RegistrationManager.REGISTRATION);
 			}
 			String today = DateFormat.getDateInstance(DateFormat.LONG, locale).format(new Date());
-			String body = translator.translate("reg.body",
-					new String[] { serverpath, tk.getRegistrationKey(), I18nManager.getInstance().getLocaleKey(locale) })
-					+ SEPARATOR
-					+ translator.translate("reg.wherefrom", new String [] { serverpath, today, ip });
+			String[] bodyAttrs = new String[] {
+					serverpath,
+					tk.getRegistrationKey(),
+					I18nManager.getInstance().getLocaleKey(locale)
+			};
+			String[] whereFromAttrs = new String [] { serverpath, today, ip };
+			String body = translator.translate("reg.body", bodyAttrs) + SEPARATOR + translator.translate("reg.wherefrom", whereFromAttrs);
 			try {
 				MailBundle bundle = new MailBundle();
 				bundle.setTo(email);
 				bundle.setContent(translator.translate("reg.subject"), body);
-				MailerResult result = mailM.sendExternMessage(bundle, null);
+				MailerResult result = mailM.sendExternMessage(bundle, null, true);
 				if (result.isSuccessful()) {
 					response = Response.ok();
 				} else {
-- 
GitLab