From 22618fcb4c492755098b494dcfc9974f443c31a0 Mon Sep 17 00:00:00 2001
From: uhensler <none@none>
Date: Tue, 10 Oct 2017 12:09:44 +0200
Subject: [PATCH] OO-2982: Separate the email configuration for inbox and
 outbox completley

---
 .../org/olat/core/util/mail/MailModule.java   | 89 ++++++++++-------
 .../mail/_i18n/LocalStrings_de.properties     |  3 +-
 .../mail/_i18n/LocalStrings_en.properties     |  3 +-
 .../core/util/mail/ui/MailController.java     | 56 ++++++-----
 .../mail/ui/MailSettingsAdminController.java  | 79 ++++++++-------
 .../org/olat/upgrade/OLATUpgrade_12_2_0.java  | 95 +++++++++++++++++++
 .../olat/upgrade/_spring/upgradeContext.xml   |  1 +
 .../resources/serviceconfig/olat.properties   |  7 +-
 8 files changed, 238 insertions(+), 95 deletions(-)
 create mode 100644 src/main/java/org/olat/upgrade/OLATUpgrade_12_2_0.java

diff --git a/src/main/java/org/olat/core/util/mail/MailModule.java b/src/main/java/org/olat/core/util/mail/MailModule.java
index f34b790533a..0a57c97431c 100644
--- a/src/main/java/org/olat/core/util/mail/MailModule.java
+++ b/src/main/java/org/olat/core/util/mail/MailModule.java
@@ -45,19 +45,22 @@ import org.springframework.stereotype.Service;
 public class MailModule extends AbstractSpringModule {
 	
 	private static final String INTERN_MAIL_SYSTEM = "internSystem";
-	private static final String SHOW_RECIPIENT_NAMES = "showRecipientNames";
-	private static final String SHOW_MAIL_ADDRESSES = "showMailAddresses";
-	private static final String SHOW_RECIPIENTS_IN_INBOX = "showRecipientsInInbox";
+	private static final String SHOW_OUTBOX_RECIPIENT_NAMES = "showRecipientNames";
+	private static final String SHOW_OUTBOX_MAIL_ADDRESSES = "showMailAddresses";
+	private static final String SHOW_INBOX_RECIPIENT_NAMES = "showInboxRecipientNames";
+	private static final String SHOW_INBOX_MAIL_ADDRESSES = "showInboxMailAddresses";
 	private static final String RECEIVE_REAL_MAIL_USER_DEFAULT_SETTING = "receiveRealMailUserDefaultSetting";
 	
 	@Value("${mail.intern:false}")
 	private boolean internSystem;
-	@Value("${mail.showRecipientNames:true}")
-	private boolean showRecipientNames;
-	@Value("${mail.showMailAddresses:false}")
-	private boolean showMailAddresses;
-	@Value("${mail.showRecipientsInInbox:true}")
-	private boolean showRecipientsInInbox;
+	@Value("${mail.showOutboxRecipientNames:true}")
+	private boolean showOutboxRecipientNames;
+	@Value("${mail.showOutboxMailAddresses:false}")
+	private boolean showOutboxMailAddresses;
+	@Value("${mail.showInboxRecipientNames:true}")
+	private boolean showInboxRecipientNames;
+	@Value("${mail.showInboxMailAddresses:false}")
+	private boolean showInboxMailAddresses;
 	@Value("${mail.receiveRealMailUserDefaultSetting:true}")
 	private boolean receiveRealMailUserDefaultSetting;
 	
@@ -86,14 +89,24 @@ public class MailModule extends AbstractSpringModule {
 			receiveRealMailUserDefaultSetting = "true".equalsIgnoreCase(receiveRealMailUserDefaultSettingValue);
 		}
 
-		String showRecipientNamesValue = getStringPropertyValue(SHOW_RECIPIENT_NAMES, true);
-		if(StringHelper.containsNonWhitespace(showRecipientNamesValue)) {
-			showRecipientNames = "true".equalsIgnoreCase(showRecipientNamesValue);
+		String showOutboxRecipientNamesValue = getStringPropertyValue(SHOW_OUTBOX_RECIPIENT_NAMES, true);
+		if(StringHelper.containsNonWhitespace(showOutboxRecipientNamesValue)) {
+			showOutboxRecipientNames = "true".equalsIgnoreCase(showOutboxRecipientNamesValue);
 		}
 
-		String showMailAddressesValue = getStringPropertyValue(SHOW_MAIL_ADDRESSES, true);
-		if(StringHelper.containsNonWhitespace(showMailAddressesValue)) {
-			showMailAddresses = "true".equalsIgnoreCase(showMailAddressesValue);
+		String showOutboxMailAddressesValue = getStringPropertyValue(SHOW_OUTBOX_MAIL_ADDRESSES, true);
+		if(StringHelper.containsNonWhitespace(showOutboxMailAddressesValue)) {
+			showOutboxMailAddresses = "true".equalsIgnoreCase(showOutboxMailAddressesValue);
+		}
+		
+		String showInboxRecipientNamesValue = getStringPropertyValue(SHOW_INBOX_RECIPIENT_NAMES, true);
+		if(StringHelper.containsNonWhitespace(showInboxRecipientNamesValue)) {
+			showInboxRecipientNames = "true".equalsIgnoreCase(showInboxRecipientNamesValue);
+		}
+
+		String showInboxMailAddressesValue = getStringPropertyValue(SHOW_INBOX_MAIL_ADDRESSES, true);
+		if(StringHelper.containsNonWhitespace(showInboxMailAddressesValue)) {
+			showInboxMailAddresses = "true".equalsIgnoreCase(showInboxMailAddressesValue);
 		}
 	}
 
@@ -120,34 +133,44 @@ public class MailModule extends AbstractSpringModule {
 	}
 
 
-	public boolean isShowRecipientNames() {
-		return showRecipientNames;
+	public boolean isShowOutboxRecipientNames() {
+		return showOutboxRecipientNames;
 	}
 
-	public void setShowRecipientNames(boolean showRecipientNames) {
-		this.showRecipientNames = showRecipientNames;
-		String showRecipientNamesStr = showRecipientNames ? "true" : "false";
-		setStringProperty(SHOW_RECIPIENT_NAMES, showRecipientNamesStr, true);
+	public void setShowOutboxRecipientNames(boolean showOutboxRecipientNames) {
+		this.showOutboxRecipientNames = showOutboxRecipientNames;
+		String showOutboxRecipientNamesStr = showOutboxRecipientNames ? "true" : "false";
+		setStringProperty(SHOW_OUTBOX_RECIPIENT_NAMES, showOutboxRecipientNamesStr, true);
 	}
 
-	public boolean isShowMailAddresses() {
-		return showMailAddresses;
+	public boolean isShowOutboxMailAddresses() {
+		return showOutboxMailAddresses;
 	}
 
-	public void setShowMailAddresses(boolean showMailAddresses) {
-		this.showMailAddresses = showMailAddresses;
-		String showMailAddressesStr = showMailAddresses ? "true" : "false";
-		setStringProperty(SHOW_MAIL_ADDRESSES, showMailAddressesStr, true);
+	public void setShowOutboxMailAddresses(boolean showOutboxMailAddresses) {
+		this.showOutboxMailAddresses = showOutboxMailAddresses;
+		String showOutboxMailAddressesStr = showOutboxMailAddresses ? "true" : "false";
+		setStringProperty(SHOW_OUTBOX_MAIL_ADDRESSES, showOutboxMailAddressesStr, true);
 	}
 
-	public boolean isShowRecipientsInInbox() {
-		return showRecipientsInInbox;
+	public boolean isShowInboxRecipientNames() {
+		return showInboxRecipientNames;
 	}
 	
-	public void setShowRecipientsInInbox(boolean showRecipientsInInbox) {
-		this.showRecipientsInInbox = showRecipientsInInbox;
-		String showRecipientsInInboxStr = showRecipientsInInbox ? "true" : "false";
-		setStringProperty(SHOW_RECIPIENTS_IN_INBOX, showRecipientsInInboxStr, true);
+	public void setShowInboxRecipientNames(boolean showInboxRecipientsNames) {
+		this.showInboxRecipientNames = showInboxRecipientsNames;
+		String showInboxRecipientNamesStr = showInboxRecipientsNames ? "true" : "false";
+		setStringProperty(SHOW_INBOX_RECIPIENT_NAMES, showInboxRecipientNamesStr, true);
+	}
+	
+	public boolean isShowInboxMailAddresses() {
+		return showInboxMailAddresses;
+	}
+
+	public void setShowInboxMailAddresses(boolean showInboxMailAddresses) {
+		this.showInboxMailAddresses = showInboxMailAddresses;
+		String showInboxMailAddressesStr = showInboxMailAddresses ? "true" : "false";
+		setStringProperty(SHOW_INBOX_MAIL_ADDRESSES, showInboxMailAddressesStr, true);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
index d73005f5bda..0fe44b370e7 100644
--- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
@@ -49,11 +49,12 @@ mail.admin.description=Konfiguration der OLAT E-Mail Versandoptionen und des Pos
 
 mail.admin.intern.enabled=OLAT Postfach aktivieren
 mail.admin.default.settings=Standardeinstellung f\u00fcr E-Mail Versand
+mail.admin.inbox=Posteingang
 mail.admin.intern.only=E-Mails an das interne OLAT Postfach zustellen
 mail.admin.intern.real.mail=E-Mails an das interne OLAT Postfach und die pers\u00f6nliche E-Mail Adresse zustellen
+mail.admin.outbox=Postausgang
 mail.admin.show.mail.addresses=E-Mail Adressen anzeigen
 mail.admin.show.recipient.names=Namen der Empf\u00E4nger anzeigen
-mail.admin.show.recipient.inbox=Empf\u00E4nger im Eingang anzeigen
 mail.settings=Einstellungen
 mail.template=E-Mail Vorlage
 mail.template.title=E-Mail Vorlage bearbeiten
diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
index ee80dfacf9d..9916fe10695 100644
--- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
@@ -13,12 +13,13 @@ mail.action.unmark=Unmark
 mail.action.unread=Unread
 mail.admin.default.settings=Standard settings for e-mail sending
 mail.admin.description=Configuration of the OLAT e-mails and the OLAT inbox
+mail.admin.inbox=Inbox
 mail.admin.intern.enabled=Enable your OLAT e-mail inbox
 mail.admin.intern.only=Send e-mails to the internal OLAT inbox
 mail.admin.intern.real.mail=Send e-Mails to the internal OLAT inbox and the personal e-mail address
+mail.admin.outbox=Outbox
 mail.admin.show.mail.addresses=Show Email address
 mail.admin.show.recipient.names=Show the name of the recipient
-mail.admin.show.recipient.inbox=Show recipients in the inbox
 mail.admin.title=E-mail inbox and outbox
 mail.attachments=Attachment
 mail.body=Message
diff --git a/src/main/java/org/olat/core/util/mail/ui/MailController.java b/src/main/java/org/olat/core/util/mail/ui/MailController.java
index a742eb6b39a..80a884b3b32 100644
--- a/src/main/java/org/olat/core/util/mail/ui/MailController.java
+++ b/src/main/java/org/olat/core/util/mail/ui/MailController.java
@@ -138,7 +138,7 @@ public class MailController extends FormBasicController {
 		sb.append("<ul class='list-inline'><li>");
 		if (from != null) {
 			sb.append(getFullName(from));
-			if (mailModule.isShowMailAddresses()) {
+			if (showMailAdresses()) {
 				Identity fromIdentity = from.getRecipient();
 				if (fromIdentity != null) {
 					sb.append(" &lt;").append(fromIdentity.getUser().getEmail()).append("&gt; ");
@@ -175,35 +175,45 @@ public class MailController extends FormBasicController {
 				groups.add(group);
 				groupCounter = 0;
 			}
-			if (outbox || mailModule.isShowRecipientsInInbox()) {
-				if (mailModule.isShowRecipientNames()) {
-					if (recipient.getRecipient() != null) {
-						// recipient is an individual
-						Identity repicientIdentity = recipient.getRecipient();
-						sb.append("<li class='o_recipient'>");
-						if(groupCounter> 0) sb.append(", ");
-						sb.append("<span>").append(getFullName(recipient)).append("</span>");
-						if (mailModule.isShowMailAddresses()) {
-							sb.append(" &lt;").append(repicientIdentity.getUser().getEmail()).append("&gt;");
-						}
-						sb.append("</li>");
-						groupCounter++;
-					}
-					if (recipient.getEmailAddress() != null) {
-						// recipient is not an OpenOLAT identity but an external email
-						sb.append("<li class='o_mail'>");
-						if(groupCounter > 0) sb.append(", ");
-						sb.append("&lt;");
-						sb.append(recipient.getEmailAddress());
-						sb.append("&gt;</li>");
-						groupCounter++;
+			if (showRecipientNames()) {
+				if (recipient.getRecipient() != null) {
+					// recipient is an individual
+					Identity repicientIdentity = recipient.getRecipient();
+					sb.append("<li class='o_recipient'>");
+					if(groupCounter> 0) sb.append(", ");
+					sb.append("<span>").append(getFullName(recipient)).append("</span>");
+					if (showMailAdresses()) {
+						sb.append(" &lt;").append(repicientIdentity.getUser().getEmail()).append("&gt;");
 					}
+					sb.append("</li>");
+					groupCounter++;
+				}
+			}
+			if (showMailAdresses()) {
+				if (recipient.getEmailAddress() != null) {
+					// recipient is not an OpenOLAT identity but an external email
+					sb.append("<li class='o_mail'>");
+					if(groupCounter > 0) sb.append(", ");
+					sb.append("&lt;");
+					sb.append(recipient.getEmailAddress());
+					sb.append("&gt;</li>");
+					groupCounter++;
 				}
 			}
 		}
 		sb.append("</ul>");
 		return sb.toString();
 	}
+
+	private boolean showRecipientNames() {
+		return (outbox && mailModule.isShowOutboxRecipientNames()) 
+				|| (!outbox && mailModule.isShowInboxRecipientNames());
+	}
+
+	private boolean showMailAdresses() {
+		return (outbox && mailModule.isShowOutboxMailAddresses()) 
+				|| (!outbox && mailModule.isShowInboxMailAddresses());
+	}
 	
 	private String getFullName(DBMailRecipient recipient) {
 		if(recipient == null || recipient.getRecipient() == null) return "";
diff --git a/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java b/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java
index dbe29f1a69e..ab8c4eaa289 100644
--- a/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java
+++ b/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java
@@ -19,6 +19,8 @@
  */
 package org.olat.core.util.mail.ui;
 
+import java.util.Collection;
+
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
@@ -44,16 +46,22 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class MailSettingsAdminController extends FormBasicController  {
 
+	private static final String INBOX_SHOW_RECIPIENT_NAMES_KEY = "inbox.show.recipient.names.key";
+	private static final String INBOX_SHOW_MAIL_ADDRESSES_KEY = "inbox.show.mail.addresses.key";
+	private static final String OUTBOX_SHOW_RECIPIENT_NAMES_KEY = "outbox.show.recipient.names.key";
+	private static final String OUTBOX_SHOW_MAIL_ADDRESSES_KEY = "outbox.show.mail.addresses.key";
+	
 	private MultipleSelectionElement enabled;
-	private MultipleSelectionElement showRecipientNamesEl;
-	private MultipleSelectionElement showMailAddressesEl;
-	private MultipleSelectionElement showRecipientsInInboxEl;
+	private MultipleSelectionElement showOutboxEl;
+	private MultipleSelectionElement showInboxEl;
 	private SingleSelection userDefaultSettingEl;
 	
 	private String[] values = {""};
 	private String[] keys = {"on"};
+	private String[] showInboxKeys = {""};
+	private String[] showOutboxKeys = {""};
+	private String[] showValues = {""};
 	
-
 	private String[] userSettingValues ;
 	private String[] userSettingKeys = {"intern.only","send.copy"};
 
@@ -64,6 +72,16 @@ public class MailSettingsAdminController extends FormBasicController  {
 	public MailSettingsAdminController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl, null, Util.createPackageTranslator(MailModule.class, ureq.getLocale()));
 		
+		showInboxKeys = new String [] {
+				INBOX_SHOW_RECIPIENT_NAMES_KEY,
+				INBOX_SHOW_MAIL_ADDRESSES_KEY};
+		showOutboxKeys = new String [] {
+				OUTBOX_SHOW_RECIPIENT_NAMES_KEY,
+				OUTBOX_SHOW_MAIL_ADDRESSES_KEY};
+		showValues = new String [] {
+				getTranslator().translate("mail.admin.show.recipient.names"),
+				getTranslator().translate("mail.admin.show.mail.addresses")};
+		
 		initForm(ureq);
 	}
 
@@ -91,21 +109,15 @@ public class MailSettingsAdminController extends FormBasicController  {
 		}
 		userDefaultSettingEl.setEnabled(internEnabled);
 
+		showInboxEl = uifactory.addCheckboxesVertical("mail.admin.inbox", formLayout, showInboxKeys, showValues, 1);
+		showInboxEl.select(INBOX_SHOW_RECIPIENT_NAMES_KEY, mailModule.isShowInboxRecipientNames());
+		showInboxEl.select(INBOX_SHOW_MAIL_ADDRESSES_KEY, mailModule.isShowInboxMailAddresses());
+		showInboxEl.addActionListener(FormEvent.ONCHANGE);
 		
-		showRecipientNamesEl = uifactory.addCheckboxesHorizontal("mail.admin.show.recipient.names", formLayout, keys, values);
-		showRecipientNamesEl.select(keys[0], mailModule.isShowRecipientNames());
-		showRecipientNamesEl.addActionListener(FormEvent.ONCHANGE);
-		showRecipientNamesEl.setEnabled(internEnabled);
-
-		showMailAddressesEl = uifactory.addCheckboxesHorizontal("mail.admin.show.mail.addresses", formLayout, keys, values);
-		showMailAddressesEl.select(keys[0], mailModule.isShowMailAddresses());
-		showMailAddressesEl.addActionListener(FormEvent.ONCHANGE);
-		showMailAddressesEl.setEnabled(internEnabled);
-		
-		showRecipientsInInboxEl = uifactory.addCheckboxesHorizontal("mail.admin.show.recipient.inbox", formLayout, keys, values);
-		showRecipientsInInboxEl.select(keys[0], mailModule.isShowRecipientsInInbox());
-		showRecipientsInInboxEl.addActionListener(FormEvent.ONCHANGE);
-		showRecipientsInInboxEl.setEnabled(internEnabled);
+		showOutboxEl = uifactory.addCheckboxesVertical("mail.admin.outbox", formLayout, showOutboxKeys, showValues, 1);
+		showOutboxEl.select(OUTBOX_SHOW_RECIPIENT_NAMES_KEY, mailModule.isShowOutboxRecipientNames());
+		showOutboxEl.select(OUTBOX_SHOW_MAIL_ADDRESSES_KEY, mailModule.isShowOutboxMailAddresses());
+		showOutboxEl.addActionListener(FormEvent.ONCHANGE);
 		
 		final FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator());
 		buttonGroupLayout.setRootForm(mainForm);
@@ -130,19 +142,19 @@ public class MailSettingsAdminController extends FormBasicController  {
 			mailModule.setReceiveRealMailUserDefaultSetting(realMailSetting);
 		}
 		userDefaultSettingEl.setEnabled(on);
-		// recipient names
-		boolean showRecipientNames = !showRecipientNamesEl.getSelectedKeys().isEmpty();
-		mailModule.setShowRecipientNames(showRecipientNames);
-		showRecipientNamesEl.setEnabled(on);
-		// mail addresses
-		boolean showMailaddresses = !showMailAddressesEl.getSelectedKeys().isEmpty();
-		mailModule.setShowMailAddresses(showMailaddresses);
-		showMailAddressesEl.setEnabled(on);
-		// recipients in inbox
-		boolean showRecipientsInInbox = !showRecipientsInInboxEl.getSelectedKeys().isEmpty();
-		mailModule.setShowRecipientsInInbox(showRecipientsInInbox);
-		showRecipientsInInboxEl.setEnabled(on);
-
+		
+		Collection<String> showInboxKeys = showInboxEl.getSelectedKeys();
+		boolean showInboxRecipientName = showInboxKeys.contains(INBOX_SHOW_RECIPIENT_NAMES_KEY);
+		mailModule.setShowInboxRecipientNames(showInboxRecipientName);
+		boolean showInboxMailAddresses = showInboxKeys.contains(INBOX_SHOW_MAIL_ADDRESSES_KEY);
+		mailModule.setShowInboxMailAddresses(showInboxMailAddresses);
+		
+		Collection<String> showOutboxKeys = showOutboxEl.getSelectedKeys();
+		boolean showOutboxRecipientName = showOutboxKeys.contains(OUTBOX_SHOW_RECIPIENT_NAMES_KEY);
+		mailModule.setShowOutboxRecipientNames(showOutboxRecipientName);
+		boolean showOutboxMailAddresses = showOutboxKeys.contains(OUTBOX_SHOW_MAIL_ADDRESSES_KEY);
+		mailModule.setShowOutboxMailAddresses(showOutboxMailAddresses);
+		
 		getWindowControl().setInfo("saved");
 	}
 
@@ -151,9 +163,8 @@ public class MailSettingsAdminController extends FormBasicController  {
 		if(source == enabled) {
 			boolean on = !enabled.getSelectedKeys().isEmpty();
 			userDefaultSettingEl.setEnabled(on);
-			showMailAddressesEl.setEnabled(on);
-			showRecipientNamesEl.setEnabled(on);
-			showRecipientsInInboxEl.setEnabled(on);
+			showOutboxEl.setEnabled(on);
+			showInboxEl.setEnabled(on);
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_12_2_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_12_2_0.java
new file mode 100644
index 00000000000..8123874eef2
--- /dev/null
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_12_2_0.java
@@ -0,0 +1,95 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.upgrade;
+
+import org.olat.core.util.mail.MailModule;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 10.10.2017<br>
+ * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
+ *
+ */
+public class OLATUpgrade_12_2_0 extends OLATUpgrade {
+
+	private static final String VERSION = "OLAT_12.2.0";
+	private static final String MAIL_CONFIG_SPLITTING = "MAIL CONFIG SPLITTING";
+	
+	@Autowired
+	MailModule mailModule;
+	
+	public OLATUpgrade_12_2_0() {
+		super();
+	}
+	
+	@Override
+	public String getVersion() {
+		return VERSION;
+	}
+
+	@Override
+	public boolean doPreSystemInitUpgrade(UpgradeManager upgradeManager) {
+		return false;
+	}
+
+	@Override
+	public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
+		UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
+		if (uhd == null) {
+			// has never been called, initialize
+			uhd = new UpgradeHistoryData();
+		} else if (uhd.isInstallationComplete()) {
+			return false;
+		}
+		
+		boolean allOk = true;
+		// The config of the visibility of email recipient name and address is
+		// split in inbox and outbox specific configs. Get the old values and
+		// transfer them to the new values.
+		allOk &= splitMailConfigToInboxAndOutbox(upgradeManager, uhd);
+		
+		uhd.setInstallationComplete(allOk);
+		upgradeManager.setUpgradesHistory(uhd, VERSION);
+		if(allOk) {
+			log.audit("Finished OLATUpgrade_12_2_0 successfully!");
+		} else {
+		log.audit("OLATUpgrade_12_2_0 not finished, try to restart OpenOLAT!");
+		}
+		return allOk;
+	}
+
+	private boolean splitMailConfigToInboxAndOutbox(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
+		boolean allOk = true;
+		if (!uhd.getBooleanDataValue(MAIL_CONFIG_SPLITTING)) {
+			boolean showRecipientsNames = mailModule.isShowOutboxRecipientNames();
+			mailModule.setShowInboxRecipientNames(showRecipientsNames);
+			log.info("Migrated email config 'show inbox recipient name' to: " + showRecipientsNames);
+			boolean showMailAddresses = mailModule.isShowOutboxMailAddresses();
+			mailModule.setShowInboxMailAddresses(showMailAddresses);
+			log.info("Migrated email config 'show inbox mail adresses' to: " + showMailAddresses);
+			
+			uhd.setBooleanDataValue(MAIL_CONFIG_SPLITTING, allOk);
+			upgradeManager.setUpgradesHistory(uhd, VERSION);
+		}
+		return allOk;
+	}
+
+}
diff --git a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
index bfcdb5076d6..678f39c5724 100644
--- a/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
+++ b/src/main/java/org/olat/upgrade/_spring/upgradeContext.xml
@@ -52,6 +52,7 @@
 				<bean id="upgrade_11_3_0" class="org.olat.upgrade.OLATUpgrade_11_3_0"/>
 				<bean id="upgrade_11_4_0" class="org.olat.upgrade.OLATUpgrade_11_4_0"/>				
 				<bean id="upgrade_12_0_0" class="org.olat.upgrade.OLATUpgrade_12_0_0"/>
+				<bean id="upgrade_12_2_0" class="org.olat.upgrade.OLATUpgrade_12_2_0"/>
 			</list>
 		</property>
 	</bean>
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 20dcd4ec50e..43f586909a6 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -145,9 +145,10 @@ mail.attachment.maxsize=5
 # if mail intern is enabled you must make sure, that your mysql-db accepts large packets to also save the attachments:
 # set "max_allowed_packet = 134217728" in my.cnf/my.ini see FXOLAT-154
 mail.intern=false
-mail.showRecipientNames=true
-mail.showMailAddresses=false
-mail.showRecipientsInInbox=true
+mail.showInboxRecipientNames=true
+mail.showInboxMailAddresses=false
+mail.showOutboxRecipientNames=true
+mail.showOutboxMailAddresses=false
 mail.receiveRealMailUserDefaultSetting=true
 
 ########################################################################
-- 
GitLab