2015-06-09 9 views
1

мне нужно отправить письмо с телом:отправить сообщение, используя FreeMarker

Lector {LectorName} had created a new course 
---------------------------------------------------- 
Name:  {CourseName} 
Category: {CourseCategory} 
Description: {CourseDescription} 
Links:  {CourseLinks} 
---------------------------------------------------- 
Please, review this course at {CourseApproveLink} 

я сделал на странице FreeMarker

<!DOCTYPE html> 
<html lang="en"> 
<head> 

</head> 
<body> 

<p>   ${LectorName} had created a new course</p> 
<p>----------------------------------------------------</p> 
<p>Name: ${Course.title}</p> 
<p>Category: ${Course.category.name}</p> 
<p>Description: ${Course.descr}</p> 
<p>Links: ${Course.links}</p> 
<p>----------------------------------------------------</p> 
    <p>Please, review this course at ${CourseApproveLink}</p> 
    </body> 
    </html> 

как заполнить его и передать значения в методе отправив письмо? Вот мой код. Мой метод sendMail и Bean «mailSender» с моими настройками. Нужно сделать это новое MimeMessage (сеанс)? Как получить настройки из компонента в сеанс?

@Service("mailService") 
public class MailService { 

@Autowired 
private MailSender mailSender; 
@Autowired 
private SimpleMailMessage alertMailMessage; 

@Resource(name = "freemarkerEmailConfig") 
private Configuration emailConfiguration; 

public void sendMail(String from, String to, String subject, String body) { 

SimpleMailMessage message = new SimpleMailMessage(); 

message.setFrom(from); 
message.setTo(to); 
message.setSubject(subject); 
message.setText(body); 

mailSender.send(message); 

} 

public void sendAlertMail(String alert) { 

SimpleMailMessage mailMessage = new SimpleMailMessage(alertMailMessage); 
mailMessage.setText(alert); 
mailSender.send(mailMessage); 

} 

} 



<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 

    <property name="host" value="smtp.mail.ru" /> 
    <property name="port" value="465" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="***********" /> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.transport.protocol">smtp</prop> 
      <prop key="mail.smtp.auth">true</prop> 
      <prop key="mail.smtp.ssl.enable">true</prop> 
      <prop key="mail.debug">true</prop> 
     </props> 
    </property> 
    </bean> 

    <bean id="alertMailMessage" class="org.springframework.mail.SimpleMailMessage"> 
    <property name="from"> 
     <value>[email protected]</value> 
    </property> 
    <property name="to"> 
     <value>[email protected]</value> 
    </property> 
    <property name="subject" 
     value="Alert - Exception occurred. Please investigate" /> 

    </bean> 

ответ

2

Необходимо отправить на карту метод, который отправляет электронное письмо с шаблоном freemarker. В вашем случае карта будет выглядеть примерно так:

Map<Object, Object> map = new HashMap<Object, Object>(); 
map.put("LectorName", "..."); 
map.put("Course", course); 
map.put("CourseApproveLink", "..."); 

Freemarker рассосется имена переменных на основе ключей, которые вы передали в

Если вы используете Spring, а затем настроить каталог шаблонов в applicationContext.xml, как это. :

<!-- FreeMarker Configuration --> 
<bean id="freemarkerEmailConfig" class="freemarker.template.Configuration"> 
    <property name="directoryForTemplateLoading" value="templates/email" /> 
    <property name="objectWrapper"> 
     <bean class="freemarker.template.DefaultObjectWrapper"/> 
    </property> 
</bean> 

Поместите свой шаблон под templates/email папку (по отношению к вашему веб-приложение). Вводят freemarkerEmailConfig боб, определенный в ApplicationContext в своем классе услуги:

@Resource(name = "freemarkerEmailConfig") 
private Configuration emailConfiguration; 

Теперь в вашем классе обслуживания вы можете использовать emailConfiguration для получения шаблона, а затем обработать его с картой выше, как это:

Template template = emailConfiguration.getEmailTemplate(templateName); 
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); 

FreeMarkerTemplateUtils - это класс из Spring. Теперь text будет содержать html со всеми переменными, замещаемыми значениями из карты. Просто отправьте электронное письмо с text в виде html-контента:

MimeMessage msg = mailSender.createMimeMessage(); 
msg.setFrom(new InternetAddress(EMAIL_SENDER_ADDRESS, EMAIL_SENDER_PERSONAL)); 
msg.setSubject(subject); 
msg.setSentDate(new Date()); 
msg.setContent(text, "text/html; charset=UTF-8"); 
for (EmailInternetAddress emailInternetAddress :emailInternetAddresses) { 
    msg.addRecipient(emailInternetAddress.getRecipientType(), 
       emailInternetAddress.getInternetAddress()); 
    } 
mailSender.send(msg); 
+0

как разместить MAP на странице freemarker? , а затем как страница freemarker преобразуется в строку? – Dmitry88

+1

обновил свой ответ с процедурой, используя Spring –

+0

таким образом

преподаватель-б создал новый курс

-------------------------------------------------- -

Имя: Джон

Категория: Менеджер по развитию

Описание: Руководитель

Ссылки: Менеджер

-------------------------------------- ---------------

Пожалуйста, просмотрите этот курс в диспетчере

Dmitry88

Смежные вопросы