# Umlaute, Velocity und JavaMailSender



## forfaro (3. Dez 2010)

Hallo zusammen,

ich habe ein Umlaute Problem beim Mailversand. Das Problem dabei ist die Betreff Zeile, die Umlaute auf Windows Systemen korrekt anzeigt, aber auf Mac Systemen zum Beispiel zerhaut. 
Zerhauen heisst in dem Fall, das die Umlaute durch Fragezeichen oder Formatierungen ersetzt oder den UTF8 Encoding String vor dem Betreff mit ausgeben und den Umlaut formatiert anzeigen.

Damit kommen wir zum Encoding, die Files für die Mail-Templates sind UTF8 Encoded und im Betreff der Mails kommen die Texte auch als UTF8 an (Beispiel: ?UTF-8?Q?Shop_-_gel=C3=B6schtes_Angebot?=).

Der Mailversand läuft per Velocity und JavaMailSender.

Velocity wird per Spring als Bean eingebunden:


```
<bean id="velocityEngine"
	class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
	<property name="velocityProperties">
		<value>
			resource.loader=class
			class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
			<!-- 
			class.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader
			-->
			file.resource.loader.path = /templates/email/
			file.resource.loader.cache = true
			file.resource.loader.unicode = true
			file.resource.loader.modificationCheckInterval = 5
			input.encoding=UTF-8
			output.encoding=ISO-8859-1
		</value>
	</property>
</bean>
```

Die Templates (einfache Textdateien mit .vm Endung, UTF8 encodiert) werden geholt per 


```
String subject = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, TEMPLATE_PATH + template + "_subject.vm", model);
String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, TEMPLATE_PATH + template + ".vm", model);
........
sendEmail(getUser().getEmail(), subject, body);
```

Das model ist eine einfache Hashmap, die die Objekte für die Anzeige enthält, was für die Betreffzeile aber unwichtig ist und im Nachrichtentext problemlos funktioniert.

Der Versand erfolgt dann per JavaMailSender (org.springframework.mail.javamail.JavaMailSender). 


```
private void sendEmail(final String receiver, final String subject, final String htmlBody) {
	MimeMessagePreparator preparator = new MimeMessagePreparator() {
		public void prepare(MimeMessage mimeMessage) throws Exception {
			MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
			message.setTo(receiver);
			message.setFrom(SENDER);
			
			message.setSubject(subject);
			message.setText(htmlBody, true);
		}
	};
	try {
		this.mailSender.send(preparator);
	} catch (MailException e) {
		LOG.error(e.getMessage());
		e.printStackTrace();
	}			
}
```

Ich hoffe, das sind jetzt alle nötigen Informationen. Hat jemand eine Idee, wie ich das umbaue, oder was ich falsch mache, das der Betreff auf allen (gängigen) Systemen ordentlich mit Umlauten ankommt? Der Nachrichtentext selbst, der in HTML kommt, funktioniert einwandfrei.

Schon mal vielen Dank und Grüße
vom Forfaro


----------



## Gelöschtes Mitglied 5909 (8. Dez 2010)

mal  output.encoding=ISO-8859-1 auf UTF-8 gesetzt?


----------

