Зачем вам нужен графический интерфейс для создания ваших писем? Лучше сохранять содержимое электронной почты как можно более простым, а не встраивать в него HTML-теги. Если ваш пользователь решит открыть электронное письмо простым текстом или текстом, то все, что он увидит, - это просто куча уродливых тегов.
Используя шаблонизатор, такой как Velocity или Freemarker, вы можете создать свой шаблон электронной почты. Даже при использовании специальных сообщений электронной почты вы можете оставить заголовок и нижний колонтитул одинаковыми с помощью шаблона электронной почты, и вы можете поменять основной текст сообщениями adhoc.
В моем проекте у меня есть шаблон электронной почты, использующий Velocity, например: -
исключение-email.vm файл
** Please do not reply to this message **
The project administrator has been notified regarding this error.
Remote Host : $remoteHost
Server : $serverName
Request URI : $requestURI
User ID : $currentUser
Exception :
$stackTrace
Чтобы получить составленное письмо в виде строки, я делаю следующее: -
private String getMessage(HttpServletRequest request, Throwable t) {
Map<String, String> values = new HashMap<String, String>();
values.put("remoteHost", request.getRemoteHost());
values.put("serverName", request.getServerName());
values.put("requestURI", request.getRequestURI());
values.put("currentUser", ((currentUser != null) ? currentUser.getLanId() : "(User is undefined)"));
StringWriter sw = new StringWriter(500);
t.printStackTrace(new PrintWriter(sw));
values.put("stackTrace", sw.toString());
return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "exception-email.vm", values);
}
Конечно, я использую Spring для подключения velocityEngine
: -
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<props>
<prop key="resource.loader">class</prop>
<prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
</props>
</property>
</bean>