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 bb100412c745880a61f4616e5e9bb525f90c84e2..a0814cc02258d12c8283bb3150657475b8010179 100644
--- a/src/main/java/org/olat/core/util/mail/MailManager.java
+++ b/src/main/java/org/olat/core/util/mail/MailManager.java
@@ -202,5 +202,7 @@ public interface MailManager {
 	public MailContent decorateMail(MailBundle bundle);
 	
 	public String decorateMailBody(String body, Locale locale);
+	
+	public MailContent evaluateTemplate(MailTemplate template);
 
 }
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 bbfe593cc1900d1096b5d81de931b5f8a3bbdae1..d15faefcce9dd71f70d7e6fa8caa5f1ebeceab43 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
@@ -755,6 +755,25 @@ public class MailManagerImpl implements MailManager, InitializingBean  {
 		return new SimpleMailContent(content.getSubject(), decoratedBody, content.getAttachments());
 	}
 	
+	@Override
+	public MailContent evaluateTemplate(MailTemplate template) {
+		VelocityContext context;
+		if(template.getContext() != null) {
+			context = new VelocityContext(template.getContext());
+		} else {
+			context = new VelocityContext();
+		}
+		template.putVariablesInMailContext(context, null);
+		context.put("server", Settings.getServerContextPathURI());
+
+		MailerResult result = new MailerResult();
+		StringWriter subjectWriter = new StringWriter(2000);
+		evaluate(context, template.getSubjectTemplate(), subjectWriter, result);
+		StringWriter bodyWriter = new StringWriter(2000);
+		evaluate(context, template.getBodyTemplate(), bodyWriter, result);
+		return new SimpleMailContent(subjectWriter.toString(), bodyWriter.toString(), template.getAttachments());
+	}
+
 	public String decorateMailBody(String body, Locale locale) {
 		String template = getMailTemplate();
 		boolean htmlTemplate = StringHelper.isHtml(template);
diff --git a/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java b/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java
index d413f9ae73f9bf4fac8088b6fe4b5c14a5214f02..6fb9fd2f1b880ec152fd5dcbe2b789ca1ce3d6b5 100644
--- a/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java
+++ b/src/main/java/org/olat/core/util/mail/model/SimpleMailContent.java
@@ -41,7 +41,7 @@ public class SimpleMailContent implements MailContent {
 		this.subject = subject;
 		this.body = body;
 		
-		attachments = new ArrayList<File>();
+		attachments = new ArrayList<>();
 		if(attachmentArr != null && attachmentArr.length > 0) {
 			for(File attachment:attachmentArr) {
 				if(attachment != null && attachment.exists()) {
@@ -55,9 +55,9 @@ public class SimpleMailContent implements MailContent {
 		this.subject = subject;
 		this.body = body;
 		if(attachmentList == null) {
-			this.attachments = new ArrayList<File>(1);
+			this.attachments = new ArrayList<>(1);
 		} else {
-			this.attachments = new ArrayList<File>(attachmentList);
+			this.attachments = new ArrayList<>(attachmentList);
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/co/CORunController.java b/src/main/java/org/olat/course/nodes/co/CORunController.java
index df6e82cebc6941e71854c060c097c9fcca98dec3..53a471c368b3aab47a0d9ff3a2a707455ba7dd6e 100755
--- a/src/main/java/org/olat/course/nodes/co/CORunController.java
+++ b/src/main/java/org/olat/course/nodes/co/CORunController.java
@@ -46,6 +46,8 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.mail.ContactList;
 import org.olat.core.util.mail.ContactMessage;
+import org.olat.core.util.mail.MailContent;
+import org.olat.core.util.mail.MailManager;
 import org.olat.course.groupsandrights.CourseGroupManager;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.group.BusinessGroup;
@@ -70,12 +72,15 @@ public class CORunController extends BasicController {
 	private ContactFormController coFoCtr;
 
 	private final CourseGroupManager cgm;
+	
+	@Autowired
+	private MailManager mailManager;
 	@Autowired
 	private BGAreaManager areaManager;
 	@Autowired
-	private BusinessGroupService businessGroupService;	
+	private RepositoryService repositoryService;
 	@Autowired
-	private  RepositoryService repositoryService;
+	private BusinessGroupService businessGroupService;
 
 	/**
 	 * Constructor for the contact form run controller
@@ -225,6 +230,9 @@ public class CORunController extends BasicController {
 			CourseMailTemplate template = new CourseMailTemplate(entry, getIdentity(), getLocale());
 			template.setBodyTemplate(mBody);
 			template.setSubjectTemplate(mSubject);
+			MailContent content = mailManager.evaluateTemplate(template);
+			template.setSubjectTemplate(content.getSubject());
+			template.setBodyTemplate(content.getBody());
 			coFoCtr = new ContactFormController(ureq, getWindowControl(), false, false, false, cmsg, template);
 			listenTo(coFoCtr);//dispose as this controller is disposed
 			putInitialPanel(coFoCtr.getInitialComponent());