Настройка динамического содержимого электронной почты с помощью String replace () или replaceAll () - PullRequest
0 голосов
/ 13 октября 2010

Я использую Spring MVC для своего веб-приложения и использую applicationContext.xml файл для настройки моих электронных писем, которые я добавляю в мои контроллеры в моем файле spring-servlet.xml .

Некоторые из писем, которые мне нужно отправить, должны быть адаптированы к клиенту, которому они отправляются. Определенная информация в электронном письме (имя, фамилия, номер телефона и т. Д.) Должна быть заполнена после того, как текст электронного письма будет введен в контроллер и отправляется.

Примером этого является приведенный ниже компонент

<bean id="customeMailMessage" class="org.springframework.mail.SimpleMailMessage">
   <property name="from" value="from@no-spam.com" />
   <property name="to" value="to@no-spam.com" />
   <property name="subject" value="Testing Subject" />
   <property name="text">
      <value>
         Dear %FIRST_NAME%

                 Blah Blah Blah Blah Blah...
                 We Understand that we can reach you at the following information

                 Phone:%PHONE%
                 Address:%ADDRESS%
      </value>
   </property>
</bean>

Это будет пользовательское сообщение электронной почты, которое я определю и добавлю в свой контроллер. Затем код в моем контроллере будет заполнять значения на основе входных данных, полученных от клиента, чтобы у контроллера был код, подобный следующему

    //SimpleMailMessage property is injected into controller
    private SimpleMailMessage simpleMailMessage;

    //Getters and Setters for simpleMailMessage;


    MimeMessage message = mailSender.createMimeMessage();

   try{
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(simpleMailMessage.getFrom());
        helper.setTo(simpleMailMessage.getTo());
        helper.setSubject(simpleMailMessage.getSubject());

                String text = simpleMailMessage.getText();
                text.replace("%FIRST_NAME%",model.getFirstName());
                text.replace("%PHONE%",model.getPhone());
                text.replace("%ADDRESS%",model.getAddress());
        helper.setText(simpleMailMessage.getText());
     }
         catch (MessagingException e) {
    throw new MailParseException(e);
     }
     mailSender.send(message);**strong text**

Проблема, с которой я столкнулся, заключается в том, что при попытке заменить значения, такие как % FIRST_NAME% , % PHONE% и % ADDRESS%> , это не заменяет это. Я не уверен, если это потому, что я использую replace () неправильно, или это потому, что он обрабатывает это по-другому, потому что значение вводится. Я также попытался использовать replaceAll (), и это тоже не работает. Если у кого-нибудь есть идеи, как это сделать, пожалуйста, дайте мне знать.

Спасибо

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Не забывайте, что в Java строки неизменны .то есть вы не можете изменить их, а просто создать новый из старого (см. документ для replaceAll () и обратите внимание на возвращаемое значение).

Итак replace() победне меняйте строку, к которой она вызывается, но вместо этого вернет новую строку с выполненной заменой.Вы можете использовать возвращаемое значение и просто соединить эти вызовы вместе:

String newString = oldString.replace(..).replace(...);

Если вам нужно выполнить много шаблонов, вас может заинтересовать Apache Velocity или Freemarker .Они являются специализированными шаблонизаторами, которые будут выполнять то, что вы делаете, с гораздо большим количеством опций (например, предоставляя циклы, форматирование, условные выражения и т. Д.)

1 голос
/ 13 октября 2010

Я бы посоветовал не изобретать колесо, создав собственную систему шаблонов. Для этого используйте Apache Velocity или другую библиотеку - они предлагают больше функций, являются более мощными и более производительными, чем любое решение для домашнего приготовления.

Spring имеет отличную поддержку Velocity, и я использовал шаблоны Velocity во многих приложениях Spring MVC (для шаблонов электронной почты и веб-шаблонов) с нулевыми проблемами.

0 голосов
/ 01 июля 2012

Я бы хотел представить здесь движок шаблонов Rythm.Вот несколько моментов об этой работе:

  • Подобный бритве, synatx, очень чистый и дружественный для Java-программиста
  • Таким образом, скомпилированный в байт-код Java очень быстрый.В 2–3 раза быстрее, чем скорость
  • . Она охватывает все функции Velocity и многое другое.См. Демонстрацию полного набора функций , размещенную на движке приложений Google.
  • API является самым простым среди других шаблонизаторов Java (скорость, freemarker ...)

Пример1, выполнить рендеринг с файлом шаблона и передать параметр по позиции:

String result = Rythm.render("/path/to/my/template.txt", foo, bar, ...);

Пример 2, выполнить рендеринг с файлом шаблона и передать параметр по имени:

Map<String, Object> args = new HashMap<String, Object>();
args.put("foo", foo);
args.put("bar", bar);
...
String result = Rythm.render("/path/to/my/template.txt", args);

Sample 3, выполнить рендеринг со строковым содержимыми передайте параметр по позиции:

String result = Rythm.render("@args User user;User name is @user.name", user);

Образец 4, визуализация со строковым содержимым в Режим интерполяции строк :

String result = Rythm.render("User name is @name", user.name);

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...