Я использую Apache Velocity в качестве системы шаблонов электронной почты. Вы можете определить экземпляр VelocityEngine как пружинный компонент и внедрить его в свои контроллеры. Однако гораздо более чистое решение заключается в том, чтобы поместить код отправки почты в службу и внедрить вашу службу в ваш контроллер.
@Autowired private VelocityEngine velocityEngine;
@Autowired private JavaMailSender mailSender;
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo("customer@mail.com");
message.setFrom("noreply@mail.com");
message.setSubject("You got mail!");
Map<String, Object> model = new HashMap<String, Object>();
model.put("param1", new Date());
String text =
VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine,
"com/myapp/mailtemplates/email.vm",
model
);
mimeMessage.setText(text,"utf-8", "html");
mimeMessage.setHeader("Content-Type", "text/html; charset=utf-8");
}
};
mailSender.send(preparator);
HashMap может использоваться для передачи параметров, которые затем можно использовать внутри шаблона скорости.
Затем вы можете отправить свое электронное письмо, используя «JavaMailSender», который также можно определить как пружинный компонент.
Вы можете определить bean-компоненты mailSender и speedEngine следующим образом:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.mail.com" />
<property name="username" value="sender" />
<property name="password" value="password" />
<property name="javaMailProperties">
<props>
<!-- Use SMTP-AUTH to authenticate to SMTP server -->
<prop key="mail.smtp.auth">true</prop>
<!-- Use TLS to encrypt communication with SMTP server -->
<!-- <prop key="mail.smtp.starttls.enable">true</prop> -->
</props>
</property>
</bean>
<!-- Apache Velocity Email Template Engine -->
<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
</value>
</property>
</bean>